2
0
forked from s444420/AL-2020

img is cropped and transformed to torch

This commit is contained in:
shaaqu 2020-05-31 17:21:05 +02:00
parent a12cde0aa7
commit 29486c27df
4 changed files with 66 additions and 29 deletions

View File

@ -19,16 +19,10 @@
<select /> <select />
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="828778c9-9d97-422f-a727-18ddbd059b85" name="Default Changelist" comment="add coder.py"> <list default="true" id="828778c9-9d97-422f-a727-18ddbd059b85" name="Default Changelist" comment="detecting digits">
<change afterPath="$PROJECT_DIR$/coder/12345.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/coder/ll.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/coder/testno.png" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/coder/coder.py" beforeDir="false" afterPath="$PROJECT_DIR$/coder/coder.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/coder/coder.py" beforeDir="false" afterPath="$PROJECT_DIR$/coder/coder.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/coder/digit_reco_model.pt" beforeDir="false" afterPath="$PROJECT_DIR$/coder/digit_reco_model.pt" afterDir="false" />
<change beforePath="$PROJECT_DIR$/coder/digit_reco_model2.pt" beforeDir="false" afterPath="$PROJECT_DIR$/coder/digit_reco_model2.pt" afterDir="false" />
<change beforePath="$PROJECT_DIR$/coder/digits_recognizer.py" beforeDir="false" afterPath="$PROJECT_DIR$/coder/digits_recognizer.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/coder/digits_recognizer.py" beforeDir="false" afterPath="$PROJECT_DIR$/coder/digits_recognizer.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/coder/image.py" beforeDir="false" afterPath="$PROJECT_DIR$/coder/image.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/coder/rocognizer.py" beforeDir="false" afterPath="$PROJECT_DIR$/coder/rocognizer.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/coder/rocognizer.py" beforeDir="false" afterPath="$PROJECT_DIR$/coder/rocognizer.py" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
@ -88,7 +82,7 @@
<recent name="C:\Users\Pawel Lukaszewicz\PycharmProjects\AL-2020\coder\dataset" /> <recent name="C:\Users\Pawel Lukaszewicz\PycharmProjects\AL-2020\coder\dataset" />
</key> </key>
</component> </component>
<component name="RunManager" selected="Python.rocognizer"> <component name="RunManager" selected="Python.digits_recognizer">
<configuration default="true" type="PythonConfigurationType" factoryName="Python"> <configuration default="true" type="PythonConfigurationType" factoryName="Python">
<module name="wozek" /> <module name="wozek" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
@ -137,9 +131,6 @@
<module name="wozek" /> <module name="wozek" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" /> <option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" /> <option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/coder" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/coder" />
<option name="IS_MODULE_SDK" value="true" /> <option name="IS_MODULE_SDK" value="true" />
@ -227,9 +218,9 @@
</list> </list>
<recent_temporary> <recent_temporary>
<list> <list>
<item itemvalue="Python.digits_recognizer" />
<item itemvalue="Python.rocognizer" /> <item itemvalue="Python.rocognizer" />
<item itemvalue="Python.coder" /> <item itemvalue="Python.coder" />
<item itemvalue="Python.digits_recognizer" />
<item itemvalue="Python.z8" /> <item itemvalue="Python.z8" />
<item itemvalue="Python.image" /> <item itemvalue="Python.image" />
</list> </list>
@ -272,7 +263,8 @@
<workItem from="1590518246722" duration="12616000" /> <workItem from="1590518246722" duration="12616000" />
<workItem from="1590559069326" duration="13892000" /> <workItem from="1590559069326" duration="13892000" />
<workItem from="1590575699320" duration="792000" /> <workItem from="1590575699320" duration="792000" />
<workItem from="1590766924835" duration="4315000" /> <workItem from="1590766924835" duration="10060000" />
<workItem from="1590929874289" duration="7728000" />
</task> </task>
<task id="LOCAL-00001" summary="create Shelf"> <task id="LOCAL-00001" summary="create Shelf">
<created>1589815443652</created> <created>1589815443652</created>
@ -365,7 +357,14 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1590538529471</updated> <updated>1590538529471</updated>
</task> </task>
<option name="localTasksCounter" value="14" /> <task id="LOCAL-00014" summary="detecting digits">
<created>1590846768877</created>
<option name="number" value="00014" />
<option name="presentableId" value="LOCAL-00014" />
<option name="project" value="LOCAL" />
<updated>1590846768877</updated>
</task>
<option name="localTasksCounter" value="15" />
<servers /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
@ -398,7 +397,8 @@
<MESSAGE value="new dataset" /> <MESSAGE value="new dataset" />
<MESSAGE value="going to pytorch on conda eve" /> <MESSAGE value="going to pytorch on conda eve" />
<MESSAGE value="add coder.py" /> <MESSAGE value="add coder.py" />
<option name="LAST_COMMIT_MESSAGE" value="add coder.py" /> <MESSAGE value="detecting digits" />
<option name="LAST_COMMIT_MESSAGE" value="detecting digits" />
</component> </component>
<component name="WindowStateProjectService"> <component name="WindowStateProjectService">
<state x="115" y="162" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog" timestamp="1589923610328"> <state x="115" y="162" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog" timestamp="1589923610328">
@ -425,14 +425,14 @@
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="277" y="57" key="SettingsEditor/0.0.1536.824@0.0.1536.824" timestamp="1590443566792" /> <state x="277" y="57" key="SettingsEditor/0.0.1536.824@0.0.1536.824" timestamp="1590443566792" />
<state x="361" y="145" key="Vcs.Push.Dialog.v2" timestamp="1590538563335"> <state x="361" y="145" key="Vcs.Push.Dialog.v2" timestamp="1590846777672">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824@0.0.1536.824" timestamp="1590538563335" /> <state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824@0.0.1536.824" timestamp="1590846777672" />
<state x="54" y="145" width="672" height="678" key="search.everywhere.popup" timestamp="1589918982407"> <state x="54" y="145" width="672" height="678" key="search.everywhere.popup" timestamp="1590930912296">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="54" y="145" width="672" height="678" key="search.everywhere.popup/0.0.1536.824@0.0.1536.824" timestamp="1589918982407" /> <state x="54" y="145" width="672" height="678" key="search.everywhere.popup/0.0.1536.824@0.0.1536.824" timestamp="1590930912296" />
</component> </component>
<component name="com.intellij.coverage.CoverageDataManagerImpl"> <component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/AL_2020$feature_hashing.coverage" NAME="feature_hashing Coverage Results" MODIFIED="1589823737949" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/Assiging" /> <SUITE FILE_PATH="coverage/AL_2020$feature_hashing.coverage" NAME="feature_hashing Coverage Results" MODIFIED="1589823737949" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/Assiging" />

View File

@ -52,6 +52,7 @@ plt.show()
with torch.no_grad(): with torch.no_grad():
logps = model(img) logps = model(img)
print(logps)
ps = torch.exp(logps) ps = torch.exp(logps)
probab = list(ps.numpy()[0]) probab = list(ps.numpy()[0])

View File

@ -17,6 +17,7 @@ train_set = datasets.MNIST('PATH_TO_STORE_TRAINSET', download=True, train=True,
val_set = datasets.MNIST('PATH_TO_STORE_TESTSET', download=True, train=False, transform=transform) val_set = datasets.MNIST('PATH_TO_STORE_TESTSET', download=True, train=False, transform=transform)
train_loader = torch.utils.data.DataLoader(train_set, batch_size=64, shuffle=True) train_loader = torch.utils.data.DataLoader(train_set, batch_size=64, shuffle=True)
val_loader = torch.utils.data.DataLoader(val_set, batch_size=64, shuffle=True) val_loader = torch.utils.data.DataLoader(val_set, batch_size=64, shuffle=True)
print(train_set[0])
# building nn model # building nn model
input_size = 784 # = 28*28 input_size = 784 # = 28*28

View File

@ -4,10 +4,19 @@ import imutils
import cv2 import cv2
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import torch import torch
from matplotlib import cm
from torch import nn
from PIL import Image from PIL import Image
from skimage.feature import hog
from torchvision.transforms import transforms
code = []
path = "test1.jpg" path = "test1.jpg"
transform = transforms.Compose([transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,)),
])
img = cv2.imread(path) img = cv2.imread(path)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
@ -19,18 +28,44 @@ ctrs, hier = cv2.findContours(im_th.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_
rects = [cv2.boundingRect(ctr) for ctr in ctrs] rects = [cv2.boundingRect(ctr) for ctr in ctrs]
# load nn model
input_size = 784 # = 28*28
hidden_sizes = [128, 128, 64]
output_size = 10
model = nn.Sequential(nn.Linear(input_size, hidden_sizes[0]),
nn.ReLU(),
nn.Linear(hidden_sizes[0], hidden_sizes[1]),
nn.ReLU(),
nn.Linear(hidden_sizes[1], hidden_sizes[2]),
nn.ReLU(),
nn.Linear(hidden_sizes[2], output_size),
nn.LogSoftmax(dim=-1))
model.load_state_dict(torch.load('digit_reco_model2.pt'))
model.eval()
for rect in rects: for rect in rects:
# Draw the rectangles # Crop image
cv2.rectangle(img, (rect[0], rect[1]), (rect[0] + rect[2], rect[1] + rect[3]), (0, 255, 0), 3) crop_img = img[rect[1]:rect[1] + rect[3], rect[0]:rect[0] + rect[2]]
# Make the rectangular region around the digit plt.imshow(crop_img)
leng = int(rect[3] * 1.6) plt.show()
pt1 = int(rect[1] + rect[3] // 2 - leng // 2)
pt2 = int(rect[0] + rect[2] // 2 - leng // 2)
roi = im_th[pt1:pt1+leng, pt2:pt2+leng]
# Resize the image # Resize the image
roi = cv2.resize(roi, (28, 28), interpolation=cv2.INTER_AREA) roi = cv2.resize(crop_img, (28, 28), interpolation=cv2.INTER_AREA)
roi = cv2.dilate(roi, (3, 3)) plt.imshow(roi)
# Calculate the HOG features plt.show()
im = Image.fromarray(roi)
im = transform(im)
print(im)
plt.imshow(im)
plt.show()
with torch.no_grad():
logps = model(im)
ps = torch.exp(logps)
print(ps[0])
probab = list(ps.numpy()[0])
print("Predicted Digit =", probab.index(max(probab)))
cv2.imshow("Resulting Image with Rectangular ROIs", img) cv2.imshow("Resulting Image with Rectangular ROIs", img)
cv2.waitKey() cv2.waitKey()