Refactoring; Renamed to constants
This commit is contained in:
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -3,5 +3,5 @@
|
||||
<component name="JavaScriptSettings">
|
||||
<option name="languageLevel" value="ES6" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.5.2 (/usr/bin/python3.5)" project-jdk-type="Python SDK" />
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (2)" project-jdk-type="Python SDK" />
|
||||
</project>
|
||||
6
.idea/receipt-recognition.iml
generated
6
.idea/receipt-recognition.iml
generated
@@ -2,12 +2,10 @@
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/data" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.5.2 (/usr/bin/python3.5)" jdkType="Python SDK" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.8 (2)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="TestRunnerService">
|
||||
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
|
||||
</component>
|
||||
</module>
|
||||
BIN
resources/fonts/Merchant Copy.ttf
Normal file
BIN
resources/fonts/Merchant Copy.ttf
Normal file
Binary file not shown.
@@ -1,21 +1,3 @@
|
||||
#from IPython.core.completer import back_latex_name_matches
|
||||
#from PIL import Image, ImageDraw, ImageFont
|
||||
# get an image
|
||||
#base = Image.open('Pillow/Tests/images/hopper.png').convert('RGBA')
|
||||
|
||||
# make a blank image for the text, initialized to transparent text color
|
||||
#img = Image.new('RGB', (30, 30), (255,255,255))
|
||||
#
|
||||
# # get a font
|
||||
# fnt = ImageFont.truetype('resources\HelveticaNeueLight.ttf', 40)
|
||||
# # get a drawing context
|
||||
# d = ImageDraw.Draw(img)
|
||||
#
|
||||
#
|
||||
# # draw text
|
||||
# d.text((0,0), "T", font=fnt, fill=(0,0,0))
|
||||
# text_width, text_height = d.textsize('T')
|
||||
# print("width {:d} - height {:d}".format(text_width, text_height))
|
||||
|
||||
# ------------------------------ Generate Characters ----------------------------#
|
||||
# Import python imaging libs
|
||||
@@ -27,13 +9,72 @@ from PIL import ImageFont, ImageFilter
|
||||
import numpy as np
|
||||
# Import operating system lib
|
||||
import os, errno
|
||||
|
||||
from ImageHelper import noisy
|
||||
# Import random generator
|
||||
from random import randint
|
||||
import shutil
|
||||
import csv
|
||||
import pickle
|
||||
#---------------------------------- Input and Output ---------------------------#
|
||||
|
||||
# Directory containing fonts
|
||||
font_dir = '../resources/fonts'
|
||||
|
||||
# Output
|
||||
out_dir = '../results/'
|
||||
|
||||
k = 0
|
||||
|
||||
# ------------------------------------ Characters -------------------------------#
|
||||
# Numbers
|
||||
NUMBERS = ['0', '1', '2']
|
||||
|
||||
# Small letters
|
||||
SMALL_LETTERS = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
|
||||
SMALL_LETTERS_SAMPLE = ['k', 'b', 'c', 'e']
|
||||
CAPITAL_LETTERS = [x.capitalize() for x in SMALL_LETTERS]
|
||||
CAPITAL_LETTERS_SAMPLE = [x.capitalize() for x in SMALL_LETTERS_SAMPLE]
|
||||
|
||||
# Capital letters
|
||||
#capital_letters = ["A", 'B', 'C']
|
||||
|
||||
# Select characters
|
||||
CHARACTERS = SMALL_LETTERS
|
||||
CHARACTERS_SAMPLE = SMALL_LETTERS_SAMPLE
|
||||
#------------------------------------- Colors ----------------------------------#
|
||||
|
||||
# Background color
|
||||
COLORS_WHITE = [(255, 255, 255)]
|
||||
COLORS_WHITE_SAMPLE = COLORS_WHITE
|
||||
COLORS_BLACK = (0, 10, 20, 30)
|
||||
COLORS_GRAY = [(135, 145, 155)]
|
||||
|
||||
#background_colors = white_colors
|
||||
COLORS_BACKGRND_CHOSEN = COLORS_WHITE_SAMPLE
|
||||
|
||||
# -------------------------------------- Sizes ----------------------------------#
|
||||
|
||||
# Character sizes
|
||||
FONTSIZE_SMALL = (10, 14, 16)
|
||||
FONTSIZE_MEDIUM = (20, 24, 28)
|
||||
FONTSIZE_LARGE = (30, 36, 40)
|
||||
FONTSIZE_LARGE_SAMPLE = (24, 30)
|
||||
|
||||
FONTSIZE_CHOSEN = FONTSIZE_LARGE_SAMPLE
|
||||
|
||||
# Image size
|
||||
IMAGE_SIZE = 32
|
||||
|
||||
OFFSET_X = [-0.3, -0.1, 0, 0.1, 0.3]
|
||||
OFFSET_Y = [-0.3, -0.1, 0, 0.1, 0.3]
|
||||
OFFSET_X_SAMPLE = [-0.1, 0, 0.1]
|
||||
OFFSET_Y_SAMPLE = [-0.3, -0.1, 0, 0.1, 0.3]
|
||||
|
||||
|
||||
|
||||
# -------------------------------------- rotation and offset ----------------------------------#
|
||||
ROTATION = [-0.1, -0.5, 0, 0.5, 0.1]
|
||||
ROTATION_SAMPLE = [0]
|
||||
|
||||
# ------------------------------------ Cleanup ----------------------------------#
|
||||
|
||||
@@ -53,10 +94,10 @@ def cleanup():
|
||||
|
||||
def generateCharacters(mode ='image', sample = True):
|
||||
if(mode == 'image'):
|
||||
myoffsetsX = offsetsX_sample if sample else offsetsX
|
||||
myoffsetsY = offsetsY_sample if sample else offsetsY
|
||||
mydegrees = degrees_sample if sample else degrees
|
||||
mycharacters = characters_sample if sample else characters
|
||||
myoffsetsX = OFFSET_X_SAMPLE if sample else OFFSET_X
|
||||
myoffsetsY = OFFSET_Y_SAMPLE if sample else OFFSET_Y
|
||||
mydegrees = ROTATION_SAMPLE if sample else ROTATION
|
||||
mycharacters = CHARACTERS_SAMPLE if sample else CHARACTERS
|
||||
cleanup()
|
||||
# Counter
|
||||
k = 1
|
||||
@@ -69,10 +110,10 @@ def generateCharacters(mode ='image', sample = True):
|
||||
# For each character do
|
||||
for char in mycharacters:
|
||||
# For each font size do
|
||||
for font_size in font_sizes:
|
||||
for font_size in FONTSIZE_CHOSEN:
|
||||
if font_size > 0:
|
||||
# For each background color do
|
||||
for background_color in background_colors:
|
||||
for background_color in COLORS_BACKGRND_CHOSEN:
|
||||
for offsetx in myoffsetsX:
|
||||
for offsety in myoffsetsY:
|
||||
for degree in mydegrees:
|
||||
@@ -81,7 +122,7 @@ def generateCharacters(mode ='image', sample = True):
|
||||
"font size: {}\t"
|
||||
"degree: {}\t \t"
|
||||
"offsetX: {}\t"
|
||||
"offsetY: {}".format(image_size, char, font_size, degree,offsetx, offsety))
|
||||
"offsetY: {}".format(IMAGE_SIZE, char, font_size, degree, offsetx, offsety))
|
||||
|
||||
try:
|
||||
dir = out_dir+char+'/'
|
||||
@@ -98,25 +139,25 @@ def generateCharacters(mode ='image', sample = True):
|
||||
GenerateCSVData(sample)
|
||||
|
||||
def GenerateCSVData(sample = True):
|
||||
myoffsetsX = offsetsX_sample if sample else offsetsX
|
||||
myoffsetsY = offsetsY_sample if sample else offsetsY
|
||||
mydegrees = degrees_sample if sample else degrees
|
||||
mycharacters = characters_sample if sample else characters
|
||||
myoffsetsX = OFFSET_X_SAMPLE if sample else OFFSET_X
|
||||
myoffsetsY = OFFSET_Y_SAMPLE if sample else OFFSET_Y
|
||||
mydegrees = ROTATION_SAMPLE if sample else ROTATION
|
||||
mycharacters = CHARACTERS_SAMPLE if sample else CHARACTERS
|
||||
print("image size: {} \t "
|
||||
"characters: {}\t"
|
||||
"backgrounds: {}\t"
|
||||
"font sizes: {}\t"
|
||||
"degree: {}\t"
|
||||
"offsetX: {}\t"
|
||||
"offsetY: {}".format(image_size, mycharacters, background_colors, font_sizes, mydegrees,myoffsetsX, myoffsetsY))
|
||||
"offsetY: {}".format(IMAGE_SIZE, mycharacters, COLORS_BACKGRND_CHOSEN, FONTSIZE_CHOSEN, mydegrees, myoffsetsX, myoffsetsY))
|
||||
k = 0
|
||||
i = 0
|
||||
path, dirs, files = next(os.walk(font_dir))
|
||||
file_count = len(files)
|
||||
|
||||
height = file_count*len(mycharacters)*len(font_sizes)*len(background_colors)*len(myoffsetsX)*len(myoffsetsY)*len(mydegrees)*3
|
||||
height = file_count * len(mycharacters) * len(FONTSIZE_CHOSEN) * len(COLORS_BACKGRND_CHOSEN) * len(myoffsetsX) * len(myoffsetsY) * len(mydegrees) * 3
|
||||
print(height)
|
||||
width = image_size*image_size+1
|
||||
width = IMAGE_SIZE * IMAGE_SIZE + 1
|
||||
output = np.ones((height,width), dtype=object)
|
||||
mapDic = {}
|
||||
for dirname, dirnames, filenames in os.walk(font_dir):
|
||||
@@ -129,10 +170,10 @@ def GenerateCSVData(sample = True):
|
||||
for char in mycharacters:
|
||||
mapDic[char] = i
|
||||
# For each font size do
|
||||
for font_size in font_sizes:
|
||||
for font_size in FONTSIZE_CHOSEN:
|
||||
if font_size > 0:
|
||||
# For each background color do
|
||||
for background_color in background_colors:
|
||||
for background_color in COLORS_BACKGRND_CHOSEN:
|
||||
for offsetx in myoffsetsX:
|
||||
for offsety in myoffsetsY:
|
||||
for degree in mydegrees:
|
||||
@@ -195,7 +236,7 @@ def getMapDic():
|
||||
def createImageTemplate(background_color, char, font_size, k, font_filename, degree = 0, offsetX = 0, offsetY = 0, noise = 0):
|
||||
# Create character image :
|
||||
# Grayscale, image size, background color
|
||||
char_image = Image.new('RGBA', (image_size, image_size), \
|
||||
char_image = Image.new('RGBA', (IMAGE_SIZE, IMAGE_SIZE), \
|
||||
background_color)
|
||||
# Draw character image
|
||||
draw = ImageDraw.Draw(char_image)
|
||||
@@ -205,9 +246,9 @@ def createImageTemplate(background_color, char, font_size, k, font_filename, deg
|
||||
# Get character width and height
|
||||
(font_width, font_height) = font.getsize(char)
|
||||
# Calculate x position
|
||||
x = (image_size - font_width) / 2 + offsetX*image_size
|
||||
x = (IMAGE_SIZE - font_width) / 2 + offsetX * IMAGE_SIZE
|
||||
# Calculate y position
|
||||
y = (image_size - font_height) / 2 + offsetY*image_size
|
||||
y = (IMAGE_SIZE - font_height) / 2 + offsetY * IMAGE_SIZE
|
||||
# Draw text : Position, String,
|
||||
# Options = Fill color, Font
|
||||
draw.text((x, y), char,(0,0,0), font=font)
|
||||
@@ -216,11 +257,6 @@ def createImageTemplate(background_color, char, font_size, k, font_filename, deg
|
||||
# Final file name
|
||||
file_name = "{}_f_{}_fs_{}_bc_{}_n_{}_r_{}_ox_{}_oy_{}_{}.png".\
|
||||
format(char,fontname, font_size,background_color,noise,degree,offsetX,offsetY,k)
|
||||
#str(font_size) + '_bc_' + \
|
||||
# str(background_color) + '_r_' + \
|
||||
# str(background_color) + '_r_' + \
|
||||
# str(background_color) + '_r_' + \
|
||||
# str(k) + '.png'
|
||||
|
||||
# Save image
|
||||
#char_image.save('results/' + file_name)
|
||||
@@ -229,7 +265,7 @@ def createImageTemplate(background_color, char, font_size, k, font_filename, deg
|
||||
|
||||
def createImage(directory, background_color, char, font_size, k, font_filename, degree = 0, offsetX = 0, offsetY = 0, noise = 0, save = True):
|
||||
blankImage, file_name = createBlankImage()
|
||||
blankImage.save('blankIamge.png')
|
||||
#blankImage.save('blankImage.png')
|
||||
image2, file_name2 = createImageTemplate(background_color, char, font_size, k, font_filename, degree, offsetX, offsetY, noise)
|
||||
#image2.save('./results/'+str(k)+'.png')
|
||||
px, py = 0, 0
|
||||
@@ -263,79 +299,19 @@ def addNoise(image, noise = 0):
|
||||
def createBlankImage():
|
||||
# Create character image :
|
||||
# Grayscale, image size, background color
|
||||
char_image = Image.new('RGBA', (image_size, image_size), \
|
||||
char_image = Image.new('RGBA', (IMAGE_SIZE, IMAGE_SIZE), \
|
||||
(255,255,255))
|
||||
|
||||
# w = char_image.rotate(45.5, expand=1)
|
||||
#char_image.rotate(45).show()
|
||||
# Final file name
|
||||
file_name = 'blankoImage {}x{}.png'.format(image_size, image_size)
|
||||
file_name = 'blankoImage {}x{}.png'.format(IMAGE_SIZE, IMAGE_SIZE)
|
||||
#print(file_name)
|
||||
# Save image
|
||||
#char_image.save('results/' + file_name)
|
||||
return (char_image, file_name)
|
||||
|
||||
|
||||
#---------------------------------- Input and Output ---------------------------#
|
||||
|
||||
# Directory containing fonts
|
||||
font_dir = './resources/fonts'
|
||||
|
||||
# Output
|
||||
out_dir = './results/'
|
||||
|
||||
k = 0
|
||||
|
||||
# ------------------------------------ Characters -------------------------------#
|
||||
# Numbers
|
||||
numbers = ['0', '1', '2']
|
||||
|
||||
# Small letters
|
||||
small_letters = ['a', 'b', 'c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
|
||||
small_letters_limited = ['k', 'b', 'c','e']
|
||||
capital_letters = [x.capitalize() for x in small_letters_limited]
|
||||
#print(big_letters)
|
||||
# Capital letters
|
||||
#capital_letters = ["A", 'B', 'C']
|
||||
|
||||
# Select characters
|
||||
characters = small_letters
|
||||
characters_sample = small_letters_limited
|
||||
#------------------------------------- Colors ----------------------------------#
|
||||
|
||||
# Background color
|
||||
white_colors = [(255,255,255),(220,220,220)]
|
||||
white_colors_sample = [(255,255,255)]
|
||||
black_colors = (0, 10, 20, 30)
|
||||
gray_colors = [(135, 145, 155)]
|
||||
|
||||
#background_colors = white_colors
|
||||
background_colors = white_colors_sample
|
||||
|
||||
# -------------------------------------- Sizes ----------------------------------#
|
||||
|
||||
# Character sizes
|
||||
small_sizes = (10, 14, 16)
|
||||
medium_sizes = (20, 24, 28)
|
||||
medium_sizes = (20, 24, 28)
|
||||
large_sizes = (30,36,40)
|
||||
large_sizes_sample = (24,30)
|
||||
|
||||
font_sizes = large_sizes_sample
|
||||
|
||||
# Image size
|
||||
image_size = 32
|
||||
|
||||
offsetsX = [-0.3,-0.1,0,0.1,0.3]
|
||||
offsetsY = [-0.3,-0.1,0,0.1,0.3]
|
||||
degrees = [-0.1,-0.5,0,0.5,0.1]
|
||||
offsetsX_sample = [-0.1,0,0.1]
|
||||
offsetsY_sample = [-0.3,-0.1,0,0.1,0.3]
|
||||
degrees_sample = [-0.1,-0.5,0,0.5,0.1]
|
||||
|
||||
|
||||
# -------------------------------------- rotation and offset ----------------------------------#
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user