Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

updated requirements and fixed relevant code & tests #117

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,6 @@ dmypy.json

# Pyre type checker
.pyre/

# PyCharm/Idea
.idea/
12 changes: 7 additions & 5 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+ **Version 0.0.10**:
1. Reached 10000 training samples.
2. Reached 90%+ accuracy.
2. Reached 90%+ solve rate.
+ **Version 0.0.11**:
1. Fixed error with captcha images that were taken from BytesIO.
+ **Version 0.0.12**:
Expand All @@ -9,18 +9,18 @@
+ **Version 0.0.13**:
1. Added and tested 'from_webdriver' classmethod.
+ **Version 0.1.0**:
1. 100,000 captchas crash test, accuracy is 98.5%.
1. 100,000 captchas crash test, solve rate is 98.5%.
+ **Version 0.1.1 - 0.1.5**:
1. Code adjustments and improvements.
2. Added tests.
+ **Version 0.2.0**:
1. Second crash test through 120k+ captchas.
2. Accuracy increased to 99.1%
2. Solve rate increased to 99.1%
3. Code coverage is 100%
+ **Version 0.3.0**:
1. Program can now solve images where letters are intercepted.
2. Third crash test through 140k+ captchas.
3. Accuracy increased to 99.998%
3. Solve rate increased to 99.998%
+ **Version 0.3.8**:
1. Added new instance - AmazonCaptchaCollector.
+ **Version 0.4.0**:
Expand Down Expand Up @@ -50,9 +50,11 @@
4. Drop Python 3.6 support
5. Remove `from_webdriver` method
+ **Version 0.5.4**:
1. 200,000 captchas crash test, accuracy is 100%.
1. 200,000 captchas crash test, solve rate is 100%.
2. Minor notes added.
+ **Version 0.5.6**:
1. Remove `selenium` from required dependencies.
+ **Version 0.5.10**:
1. Add timeout to `AmazonCaptcha.fromlink` method.
+ **Version 0.5.11**:
1. Accuracy is 99.5%
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
\▓▓ \▓▓\▓▓ \▓▓ \▓▓\▓▓▓▓▓▓▓▓\▓▓ \▓▓ \▓▓▓▓▓▓ \▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓ \▓▓▓▓ \▓▓▓▓▓▓▓\▓▓ \▓▓ \▓▓▓▓▓▓▓
| ▓▓
>>>solution | ▓▓ Response 0.24s
"AmznCaptcha" \▓▓ Accuracy 99.9%
"AmznCaptcha" \▓▓ Accuracy 99.5%
```
The motivation behind the creation of this library is taking its start from the genuinely simple idea: "**I don't want to use pytesseract or some other non-amazon-specific OCR services, nor do I want to install some executables to just solve a captcha. I desire to get a solution with 2 lines of code without any heavy add-ons, using a pure Python.**"

---
Pure Python, lightweight, [Pillow](https://github.com/python-pillow/Pillow)-based solver for [Amazon's text captcha](https://www.amazon.com/errors/validateCaptcha).

[![Accuracy](https://img.shields.io/badge/success%20rate-99.9%25-success)](https://github.com/a-maliarov/amazoncaptcha/blob/master/ext/accuracy.log)
[![Solve rate](https://img.shields.io/badge/success%20rate-99.9%25-success)](https://github.com/a-maliarov/amazoncaptcha/blob/master/ext/solve_rate.log)
![Timing](https://img.shields.io/badge/response%20time-0.2s-success)
[![Size](https://img.shields.io/badge/wheel%20size-0.9%20MB-informational)](https://pypi.org/project/amazoncaptcha/)
[![Version](https://img.shields.io/pypi/v/amazoncaptcha?color=informational)](https://pypi.org/project/amazoncaptcha/)
Expand Down
2 changes: 1 addition & 1 deletion amazoncaptcha/__version__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
__title__ = 'amazoncaptcha'
__description__ = "Pure Python, lightweight, Pillow-based solver for the Amazon text captcha."
__url__ = 'https://github.com/a-maliarov/amazoncaptcha'
__version__ = '0.5.11'
__version__ = '0.5.11b'
__author__ = 'Anatolii Maliarov'
__author_email__ = '[email protected]'
__license__ = 'MIT'
Expand Down
37 changes: 21 additions & 16 deletions amazoncaptcha/devtools.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,29 @@
import requests
import os

#--------------------------------------------------------------------------------------------------------------
# --------------------------------------------------------------------------------------------------------------

class AmazonCaptchaCollector(object):

def __init__(self, output_folder_path, keep_logs=True, accuracy_test=False):
def __init__(self, output_folder_path, keep_logs=True, solve_rate_test=False):
"""
Initializes the AmazonCaptchaCollector instance.

Args:
output_folder (str): Folder where images or logs should be stored.
keep_logs (bool, optional): If set to True, unsolved captcha links
will be stored separately.
accuracy_test (bool, optional): If set to True, AmazonCaptchaCollector
solve_rate_test (bool, optional): If set to True, AmazonCaptchaCollector
will not download images but just solve them and log the results.

"""

self.output_folder = output_folder_path
self.keep_logs = keep_logs
self.accuracy_test = accuracy_test
self.solve_rate_test = solve_rate_test

if not os.path.exists(self.output_folder):
os.mkdir(self.output_folder)
os.makedirs(self.output_folder)

elif not os.path.isdir(self.output_folder):
raise NotFolderError(self.output_folder)
Expand Down Expand Up @@ -79,7 +79,7 @@ def get_captcha_image(self):
Requests the page with Amazon's captcha, gets random captcha.
Creates AmazonCaptcha instance, stores an original image before solving.

If it is not an accuracy test, the image will be stored in a specified
If it is not a solve rate test, the image will be stored in a specified
folder with the solution within its name. Otherwise, only the logs
will be stored, mentioning the captcha link being processed and the result.

Expand All @@ -96,7 +96,7 @@ def get_captcha_image(self):
solution = captcha.solve(keep_logs=self.keep_logs, logs_path=self.not_solved_logs)
log_message = f'{captcha.image_link}::{solution}'

if solution != 'Not solved' and not self.accuracy_test:
if solution != 'Not solved' and not self.solve_rate_test:
print(log_message)
captcha_name = 'dl_' + self._extract_captcha_id(captcha.image_link) + '_' + solution + '.png'
original_image.save(os.path.join(self.output_folder, captcha_name))
Expand All @@ -121,20 +121,25 @@ def start(self, target, processes):
processes (int): Number of simultaneous processes.

"""
assert (processes > 0)
assert (target % processes == 0)

goal = list(range(target))
milestones = [goal[x: x + target // processes] for x in range(0, len(goal), target // processes)]

jobs = list()
for j in range(processes):
p = multiprocessing.Process(target=self._distribute_collecting, args=(milestones[j], ))
jobs.append(p)
p.start()
if processes > 1:
jobs = list()
for j in range(processes):
p = multiprocessing.Process(target=self._distribute_collecting, args=(milestones[j], ))
jobs.append(p)
p.start()

for proc in jobs:
proc.join()
for proc in jobs:
proc.join()
else:
self._distribute_collecting(milestones[0])

if self.accuracy_test:
if self.solve_rate_test:
with open(self.collector_logs, 'r', encoding='utf-8') as f:
output = f.readlines()

Expand All @@ -147,4 +152,4 @@ def start(self, target, processes):
print(result)
f.write(result)

#--------------------------------------------------------------------------------------------------------------
# --------------------------------------------------------------------------------------------------------------
25 changes: 7 additions & 18 deletions amazoncaptcha/solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from .utils import cut_the_white, merge_horizontally, find_letter_boxes
from .exceptions import ContentTypeError

from PIL import Image, ImageChops
from PIL import Image
from io import BytesIO
import warnings
import requests
Expand Down Expand Up @@ -139,7 +139,7 @@ def _translate(self):
Returns:
str: a solution if there is one OR
'Not solved' if devmode set to False OR
a solution where unrecognised letters will be replaces with dashes
a solution where unrecognised letters will be replaced with dashes

"""

Expand Down Expand Up @@ -182,8 +182,11 @@ def solve(self, keep_logs=False, logs_path='not-solved-captcha.log'):

solution = self._translate()

if solution == 'Not solved' and keep_logs and self.image_link:
output_folder = os.path.dirname(logs_path)
if len(output_folder) > 0 and not os.path.exists(output_folder):
os.makedirs(output_folder)

if solution == 'Not solved' and keep_logs and self.image_link:
with open(logs_path, 'a', encoding='utf-8') as f:
f.write(self.image_link + '\n')

Expand All @@ -207,23 +210,9 @@ def fromdriver(cls, driver, devmode=False):

"""

png = driver.get_screenshot_as_png()
element = driver.find_element(By.TAG_NAME, 'img')
image_link = element.get_attribute('src')

location = element.location
size = element.size
left = location['x']
top = location['y']
right = location['x'] + size['width']
bottom = location['y'] + size['height']

img = Image.open(BytesIO(png))
img = img.crop((left, top, right, bottom))

bytes_array = BytesIO()
img.save(bytes_array, format='PNG')
image_bytes_array = BytesIO(bytes_array.getvalue())
image_bytes_array = BytesIO(element.screenshot_as_png)

return cls(image_bytes_array, image_link, devmode)

Expand Down
6 changes: 3 additions & 3 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ AmazonCaptcha
AmazonCaptcha is an image processing library oriented on `a specific type of images taken from Amazon <https://www.amazon.com/errors/validateCaptcha>`_, which main objective is to solve the captcha in terms of a research sake without using any add-ons.

.. image:: https://img.shields.io/badge/success%20rate-99.9%25-success
:target: https://github.com/a-maliarov/amazoncaptcha/blob/master/ext/accuracy.log
:alt: Accuracy
:target: https://github.com/a-maliarov/amazoncaptcha/blob/master/ext/solve_rate.log
:alt: Solve rate

.. image:: https://img.shields.io/badge/response%20time-0.2s-success
:target: https://github.com/a-maliarov/amazoncaptcha/blob/master/ext/accuracy.log
:target: https://github.com/a-maliarov/amazoncaptcha/blob/master/ext/solve_rate.log
:alt: Timing

.. image:: https://img.shields.io/badge/wheel%20size-0.9%20MB-informational
Expand Down
6 changes: 3 additions & 3 deletions docs/reference/devtools.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ Collect captcha.
collector = AmazonCaptchaCollector(output_folder_path)
collector.start(target, simultaneous_processes)

Proceed accuracy tests.
^^^^^^^^^^^^^^^^^^^^^^^
Proceed solve rate tests.
^^^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: python

Expand All @@ -34,7 +34,7 @@ Proceed accuracy tests.
simultaneous_processes = 4
target = 200

collector = AmazonCaptchaCollector(output_folder_path, accuracy_test=True)
collector = AmazonCaptchaCollector(output_folder_path, solve_rate_test=True)
collector.start(target, simultaneous_processes)

The AmazonCaptchaCollector Class
Expand Down
28 changes: 8 additions & 20 deletions ext/accuracy.log
Original file line number Diff line number Diff line change
@@ -1,20 +1,8 @@
::Definition:: 'Test means - running the script through continious unordered
stream of earlier not solved captchas on specific version of
the program (Ver), solving specific number of captchas (Cap)
and calculating the accuracy percentage (Per) based on bare,
unedit results right after the end of process.'

::Test::Ver0.0.5::Cap1000::Per36.7::
::Test::Ver0.0.6::Cap1000::Per67.9::
::Test::Ver0.0.7::Cap2000::Per77.4::
::Test::Ver0.0.8::Cap2000::Per87.9::
::Test::Ver0.0.9::Cap3000::Per88.3::
::Test::Ver0.0.10::Cap2000::Per93.8::

::Test::Ver0.0.12::Cap12157::Per94.7::
::Test::Ver0.1.0::Cap104463::Per98.5::
::Test::Ver0.2.0::Cap125851::Per99.1::
::Test::Ver0.2.2::Cap140572::Per99.998::

::Test::Ver0.4.7::Cap144050::Per99.999::
::Test::Ver0.5.3::Cap185691::Per100.0::
::Definition:: 'Test means - running the script through a stream of captchas
for which the correct solution is known solution, with a specific
version of the program (Ver), solving a specific number of
captchas (Cap) and calculating the percentage of correctly solved
captcha (Per) based on bare, un-edited results immediately after
the end of process.'

::Test::Ver0.5.11::Cap4040::Per99.5::
11 changes: 5 additions & 6 deletions ext/requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
pillow ~= 9.5.0
requests ~= 2.30.0
coverage >= 6.3.1
codecov >= 2.1.12
webdriver_manager ~= 3.8.6
selenium ~= 4.9.1
pillow~=10.3.0
requests~=2.32.3
coverage~=7.5.3
codecov>=2.1.12
selenium~=4.21.0
20 changes: 20 additions & 0 deletions ext/solve_rate.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
::Definition:: 'Test means - running the script through a continuous unordered
stream of previously unsolved captchas with a specific version of
the program (Ver), solving a specific number of captchas (Cap)
and calculating the percentage of solved captcha (Per) based
on bare, un-edited results immediately after the end of process.'

::Test::Ver0.0.5::Cap1000::Per36.7::
::Test::Ver0.0.6::Cap1000::Per67.9::
::Test::Ver0.0.7::Cap2000::Per77.4::
::Test::Ver0.0.8::Cap2000::Per87.9::
::Test::Ver0.0.9::Cap3000::Per88.3::
::Test::Ver0.0.10::Cap2000::Per93.8::

::Test::Ver0.0.12::Cap12157::Per94.7::
::Test::Ver0.1.0::Cap104463::Per98.5::
::Test::Ver0.2.0::Cap125851::Per99.1::
::Test::Ver0.2.2::Cap140572::Per99.998::

::Test::Ver0.4.7::Cap144050::Per99.999::
::Test::Ver0.5.3::Cap185691::Per100.0::
12 changes: 7 additions & 5 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
import setuptools
import os

#--------------------------------------------------------------------------------------------------------------
# --------------------------------------------------------------------------------------------------------------

here = os.path.abspath(os.path.dirname(__file__))

with open(os.path.join(here, 'amazoncaptcha', '__version__.py'), 'r', encoding='utf-8') as f:
file_data = [i.replace('\n', '').replace('\'', '').split(' = ') for i in f.readlines()]
about = {k: v for k, v in file_data}


def readme(logo_end_line=14):
"""Extracts the logo from README file before pushing to PyPi."""

Expand All @@ -19,6 +20,7 @@ def readme(logo_end_line=14):

return long_description


classifiers = [
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
Expand All @@ -34,11 +36,11 @@ def readme(logo_end_line=14):
]

requires = [
"pillow >= 9.0.1,< 9.6.0",
"requests >= 2.27.1,< 2.31.0"
"pillow >= 9.0.1,< 10.4.0",
"requests >= 2.27.1,< 2.33.0"
]

#--------------------------------------------------------------------------------------------------------------
# --------------------------------------------------------------------------------------------------------------

setuptools.setup(
name=about['__title__'],
Expand All @@ -61,4 +63,4 @@ def readme(logo_end_line=14):
},
)

#--------------------------------------------------------------------------------------------------------------
# --------------------------------------------------------------------------------------------------------------
Binary file removed tests/captchas/error.png
Binary file not shown.
Binary file removed tests/captchas/error_1.png
Binary file not shown.
Binary file added tests/examples/accuracy/AABTRE.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AACXRC.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAENGU.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAFGTB.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAGLCK.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAGMCR.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAHNGN.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAJPYM.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAKJAA.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAKRMU.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAMYME.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAPNKF.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAREBR.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AATMAG.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AATXGX.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAUXAH.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/AAYPXY.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/ABEYCP.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/ABHPPT.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/ABJTPB.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/ABMBFC.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/ABMPKC.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/ABTJGR.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tests/examples/accuracy/ACFXCM.jpg
Binary file added tests/examples/accuracy/ACGGFL.jpg
Binary file added tests/examples/accuracy/ACGLEN.jpg
Binary file added tests/examples/accuracy/ACJECC.jpg
Binary file added tests/examples/accuracy/ACNNBL.jpg
Binary file added tests/examples/accuracy/ACPYYM.jpg
Binary file added tests/examples/accuracy/ACXAMC.jpg
Binary file added tests/examples/accuracy/AEAMAB.jpg
Binary file added tests/examples/accuracy/AEFGTJ.jpg
Binary file added tests/examples/accuracy/AEFMME.jpg
Binary file added tests/examples/accuracy/AEGPKP.jpg
Binary file added tests/examples/accuracy/AEJAXU.jpg
Binary file added tests/examples/accuracy/AELGFH.jpg
Binary file added tests/examples/accuracy/AEMBML.jpg
Binary file added tests/examples/accuracy/AENCBE.jpg
Binary file added tests/examples/accuracy/AENRXM.jpg
Binary file added tests/examples/accuracy/AERMBM.jpg
Binary file added tests/examples/accuracy/AETBJC.jpg
Binary file added tests/examples/accuracy/AEXTFH.jpg
Binary file added tests/examples/accuracy/AFBEYA.jpg
Binary file added tests/examples/accuracy/AFGXHH.jpg
Binary file added tests/examples/accuracy/AFHGRG.jpg
Binary file added tests/examples/accuracy/AFHPAB.jpg
Binary file added tests/examples/accuracy/AFKMEC.jpg
Binary file added tests/examples/accuracy/AFNFYX.jpg
Binary file added tests/examples/accuracy/AFNKPR.jpg
Binary file added tests/examples/accuracy/AFTERE.jpg
Binary file added tests/examples/accuracy/AFTMTG.jpg
Binary file added tests/examples/accuracy/AFUAHT.jpg
Binary file added tests/examples/accuracy/AFUTER.jpg
Binary file added tests/examples/accuracy/AGBHMA.jpg
Binary file added tests/examples/accuracy/AGBXAL.jpg
Binary file added tests/examples/accuracy/AGCPJE.jpg
Binary file added tests/examples/accuracy/AGEUUH.jpg
Binary file added tests/examples/accuracy/AGFJGK.jpg
Binary file added tests/examples/accuracy/AGGYXT.jpg
Binary file added tests/examples/accuracy/AGHHLT.jpg
Binary file added tests/examples/accuracy/AGNXYN.jpg
Binary file added tests/examples/accuracy/AGTAHG.jpg
Binary file added tests/examples/accuracy/AGTHFF.jpg
Binary file added tests/examples/accuracy/AGXRMJ.jpg
Binary file added tests/examples/accuracy/AHAFGT.jpg
Binary file added tests/examples/accuracy/AHELLJ.jpg
Binary file added tests/examples/accuracy/AHHMFA.jpg
Binary file added tests/examples/accuracy/AHKFYB.jpg
Binary file added tests/examples/accuracy/AHLMYJ.jpg
Binary file added tests/examples/accuracy/AHLTTY.jpg
Binary file added tests/examples/accuracy/AHPELY.jpg
Binary file added tests/examples/accuracy/AHRNHE.jpg
Binary file added tests/examples/accuracy/AHTTCY.jpg
Binary file added tests/examples/accuracy/AHUKXJ.jpg
Binary file added tests/examples/accuracy/AHYLPX.jpg
Binary file added tests/examples/accuracy/AJABHY.jpg
Binary file added tests/examples/accuracy/AJATHJ.jpg
Binary file added tests/examples/accuracy/AJBEJL.jpg
Binary file added tests/examples/accuracy/AJCNYB.jpg
Binary file added tests/examples/accuracy/AJFAHC.jpg
Binary file added tests/examples/accuracy/AJGKFK.jpg
Binary file added tests/examples/accuracy/AJHTLA.jpg
Binary file added tests/examples/accuracy/AJJLKR.jpg
Binary file added tests/examples/accuracy/AJKMXT.jpg
Binary file added tests/examples/accuracy/AJLFAU.jpg
Binary file added tests/examples/accuracy/AJLJHX.jpg
Binary file added tests/examples/accuracy/AJLXPR.jpg
Binary file added tests/examples/accuracy/AJMALC.jpg
Binary file added tests/examples/accuracy/AJNJTX.jpg
Binary file added tests/examples/accuracy/AJNPPP.jpg
Binary file added tests/examples/accuracy/AJREXJ.jpg
Binary file added tests/examples/accuracy/AJRJNM.jpg
Binary file added tests/examples/accuracy/AJRNFJ.jpg
Binary file added tests/examples/accuracy/AJULLY.jpg
Binary file added tests/examples/accuracy/AJURHC.jpg
Binary file added tests/examples/accuracy/AKCTLC.jpg
Binary file added tests/examples/accuracy/AKGPFJ.jpg
Binary file added tests/examples/accuracy/AKHBCR.jpg
Binary file added tests/examples/accuracy/AKHXTB.jpg
Binary file added tests/examples/accuracy/AKKXLR.jpg
Binary file added tests/examples/accuracy/AKTATP.jpg
Binary file added tests/examples/accuracy/AKUHYJ.jpg
Binary file added tests/examples/accuracy/AKYBAM.jpg
Binary file added tests/examples/accuracy/ALCXKL.jpg
Binary file added tests/examples/accuracy/ALEFPP.jpg
Binary file added tests/examples/accuracy/ALLTMU.jpg
Binary file added tests/examples/accuracy/ALNUYX.jpg
Binary file added tests/examples/accuracy/ALPLCH.jpg
Binary file added tests/examples/accuracy/ALRCBA.jpg
Binary file added tests/examples/accuracy/ALTLAU.jpg
Binary file added tests/examples/accuracy/ALUBYA.jpg
Binary file added tests/examples/accuracy/ALUHAE.jpg
Binary file added tests/examples/accuracy/ALURKP.jpg
Binary file added tests/examples/accuracy/ALUXPT.jpg
Binary file added tests/examples/accuracy/AMAHJX.jpg
Binary file added tests/examples/accuracy/AMBKUY.jpg
Binary file added tests/examples/accuracy/AMEAYM.jpg
Binary file added tests/examples/accuracy/AMENHC.jpg
Binary file added tests/examples/accuracy/AMFBPR.jpg
Binary file added tests/examples/accuracy/AMFNFU.jpg
Binary file added tests/examples/accuracy/AMGPEX.jpg
Binary file added tests/examples/accuracy/AMJKAP.jpg
Binary file added tests/examples/accuracy/AMJUXM.jpg
Binary file added tests/examples/accuracy/AMJYMB.jpg
Binary file added tests/examples/accuracy/AMKLXK.jpg
Binary file added tests/examples/accuracy/AMLPUJ.jpg
Binary file added tests/examples/accuracy/AMMCGE.jpg
Binary file added tests/examples/accuracy/AMNFCL.jpg
Binary file added tests/examples/accuracy/AMTAXP.jpg
Binary file added tests/examples/accuracy/AMTUFE.jpg
Binary file added tests/examples/accuracy/AMUHBG.jpg
Binary file added tests/examples/accuracy/AMXATR.jpg
Binary file added tests/examples/accuracy/ANBKMU.jpg
Binary file added tests/examples/accuracy/ANHHRJ.jpg
Binary file added tests/examples/accuracy/ANJPCC.jpg
Binary file added tests/examples/accuracy/ANJRLX.jpg
Binary file added tests/examples/accuracy/ANJXBT.jpg
Binary file added tests/examples/accuracy/ANKPFX.jpg
Binary file added tests/examples/accuracy/ANLMTN.jpg
Binary file added tests/examples/accuracy/ANLTHT.jpg
Binary file added tests/examples/accuracy/ANLXJP.jpg
Binary file added tests/examples/accuracy/ANYAMP.jpg
Binary file added tests/examples/accuracy/APCMKP.jpg
Binary file added tests/examples/accuracy/APGNJP.jpg
Binary file added tests/examples/accuracy/APJUKX.jpg
Binary file added tests/examples/accuracy/APLYME.jpg
Binary file added tests/examples/accuracy/APNKXM.jpg
Binary file added tests/examples/accuracy/APPHCT.jpg
Binary file added tests/examples/accuracy/APPYGT.jpg
Binary file added tests/examples/accuracy/APYUMC.jpg
Binary file added tests/examples/accuracy/ARCXAG.jpg
Binary file added tests/examples/accuracy/AREYET.jpg
Binary file added tests/examples/accuracy/ARGPHP.jpg
Binary file added tests/examples/accuracy/ARJLPE.jpg
Binary file added tests/examples/accuracy/ARJTMJ.jpg
Binary file added tests/examples/accuracy/ARKXRF.jpg
Binary file added tests/examples/accuracy/ARMTLU.jpg
Binary file added tests/examples/accuracy/ARNMGX.jpg
Binary file added tests/examples/accuracy/ARNTBB.jpg
Binary file added tests/examples/accuracy/ARNULM.jpg
Binary file added tests/examples/accuracy/ARPEYY.jpg
Binary file added tests/examples/accuracy/ARTPMH.jpg
Binary file added tests/examples/accuracy/ARUUMR.jpg
Binary file added tests/examples/accuracy/ARXJPY.jpg
Binary file added tests/examples/accuracy/ARXTGJ.jpg
Binary file added tests/examples/accuracy/ARYETX.jpg
Binary file added tests/examples/accuracy/ATECYU.jpg
Binary file added tests/examples/accuracy/ATEEEF.jpg
Binary file added tests/examples/accuracy/ATEGNF.jpg
Binary file added tests/examples/accuracy/ATEHET.jpg
Binary file added tests/examples/accuracy/ATFCMG.jpg
Binary file added tests/examples/accuracy/ATLPKM.jpg
Binary file added tests/examples/accuracy/ATPANB.jpg
Binary file added tests/examples/accuracy/ATPECP.jpg
Binary file added tests/examples/accuracy/ATRXFY.jpg
Binary file added tests/examples/accuracy/ATTRGL.jpg
Binary file added tests/examples/accuracy/ATUAUB.jpg
Binary file added tests/examples/accuracy/ATUGCM.jpg
Binary file added tests/examples/accuracy/ATUHHA.jpg
Binary file added tests/examples/accuracy/ATUTMN.jpg
Binary file added tests/examples/accuracy/AUAJBK.jpg
Binary file added tests/examples/accuracy/AUFKML.jpg
Binary file added tests/examples/accuracy/AUJHTM.jpg
Binary file added tests/examples/accuracy/AUKHTH.jpg
Binary file added tests/examples/accuracy/AUKLCA.jpg
Binary file added tests/examples/accuracy/AULPPC.jpg
Binary file added tests/examples/accuracy/AUMKKE.jpg
Binary file added tests/examples/accuracy/AUMRFM.jpg
Binary file added tests/examples/accuracy/AUNNKL.jpg
Binary file added tests/examples/accuracy/AUNXXP.jpg
Binary file added tests/examples/accuracy/AURCML.jpg
Binary file added tests/examples/accuracy/AUTJAH.jpg
Binary file added tests/examples/accuracy/AUTPTA.jpg
Binary file added tests/examples/accuracy/AUUEGA.jpg
Binary file added tests/examples/accuracy/AUXNYU.jpg
Binary file added tests/examples/accuracy/AXACCU.jpg
Binary file added tests/examples/accuracy/AXBCNU.jpg
Binary file added tests/examples/accuracy/AXBMCN.jpg
Binary file added tests/examples/accuracy/AXFYRK.jpg
Binary file added tests/examples/accuracy/AXGELX.jpg
Binary file added tests/examples/accuracy/AXMJEU.jpg
Binary file added tests/examples/accuracy/AXNLFU.jpg
Binary file added tests/examples/accuracy/AXNLLG.jpg
Binary file added tests/examples/accuracy/AXNRRY.jpg
Binary file added tests/examples/accuracy/AXUCXG.jpg
Binary file added tests/examples/accuracy/AXYCXN.jpg
Binary file added tests/examples/accuracy/AYAUBX.jpg
Binary file added tests/examples/accuracy/AYBXYX.jpg
Binary file added tests/examples/accuracy/AYGKRK.jpg
Binary file added tests/examples/accuracy/AYGTHL.jpg
Binary file added tests/examples/accuracy/AYHKGY.jpg
Binary file added tests/examples/accuracy/AYJRMR.jpg
Binary file added tests/examples/accuracy/AYKCRM.jpg
Binary file added tests/examples/accuracy/AYMXKE.jpg
Binary file added tests/examples/accuracy/AYNBLR.jpg
Binary file added tests/examples/accuracy/AYPHEH.jpg
Binary file added tests/examples/accuracy/AYPTLL.jpg
Binary file added tests/examples/accuracy/AYTTNX.jpg
Binary file added tests/examples/accuracy/AYUETA.jpg
Binary file added tests/examples/accuracy/AYXGFU.jpg
Binary file added tests/examples/accuracy/BACGLF.jpg
Binary file added tests/examples/accuracy/BACXGK.jpg
Binary file added tests/examples/accuracy/BAHHNX.jpg
Binary file added tests/examples/accuracy/BAHYAM.jpg
Binary file added tests/examples/accuracy/BAMNET.jpg
Binary file added tests/examples/accuracy/BANYYK.jpg
Binary file added tests/examples/accuracy/BAPJUP.jpg
Binary file added tests/examples/accuracy/BARJKK.jpg
Binary file added tests/examples/accuracy/BARKBL.jpg
Binary file added tests/examples/accuracy/BATLFU.jpg
Binary file added tests/examples/accuracy/BATMYG.jpg
Binary file added tests/examples/accuracy/BAUBEX.jpg
Binary file added tests/examples/accuracy/BAUYYP.jpg
Binary file added tests/examples/accuracy/BAYFHR.jpg
Binary file added tests/examples/accuracy/BBABNT.jpg
Binary file added tests/examples/accuracy/BBANUB.jpg
Binary file added tests/examples/accuracy/BBFJKC.jpg
Binary file added tests/examples/accuracy/BBGEGN.jpg
Binary file added tests/examples/accuracy/BBHRGU.jpg
Binary file added tests/examples/accuracy/BBKACJ.jpg
Binary file added tests/examples/accuracy/BBLYXX.jpg
Binary file added tests/examples/accuracy/BBMJAY.jpg
Binary file added tests/examples/accuracy/BBNUBE.jpg
Binary file added tests/examples/accuracy/BCCRLG.jpg
Binary file added tests/examples/accuracy/BCEULC.jpg
Binary file added tests/examples/accuracy/BCGTTR.jpg
Binary file added tests/examples/accuracy/BCGUJT.jpg
Binary file added tests/examples/accuracy/BCHJFK.jpg
Binary file added tests/examples/accuracy/BCHMUK.jpg
Binary file added tests/examples/accuracy/BCKUHR.jpg
Binary file added tests/examples/accuracy/BCLCFT.jpg
Binary file added tests/examples/accuracy/BCMEJU.jpg
Binary file added tests/examples/accuracy/BCPRTG.jpg
Binary file added tests/examples/accuracy/BCRYKP.jpg
Binary file added tests/examples/accuracy/BCYBPY.jpg
Binary file added tests/examples/accuracy/BCYFUA.jpg
Binary file added tests/examples/accuracy/BEAAMK.jpg
Binary file added tests/examples/accuracy/BEALHJ.jpg
Binary file added tests/examples/accuracy/BEARXR.jpg
Binary file added tests/examples/accuracy/BEBREK.jpg
Binary file added tests/examples/accuracy/BECTYC.jpg
Binary file added tests/examples/accuracy/BEEXXY.jpg
Binary file added tests/examples/accuracy/BEHMRX.jpg
Binary file added tests/examples/accuracy/BEKBNL.jpg
Binary file added tests/examples/accuracy/BEKTKG.jpg
Binary file added tests/examples/accuracy/BERKKM.jpg
Binary file added tests/examples/accuracy/BEYXLG.jpg
Binary file added tests/examples/accuracy/BFBULR.jpg
Binary file added tests/examples/accuracy/BFCAHM.jpg
Binary file added tests/examples/accuracy/BFECJA.jpg
Binary file added tests/examples/accuracy/BFEFTR.jpg
Binary file added tests/examples/accuracy/BFEHLF.jpg
Binary file added tests/examples/accuracy/BFGBUC.jpg
Binary file added tests/examples/accuracy/BFHTRM.jpg
Binary file added tests/examples/accuracy/BFJBBN.jpg
Binary file added tests/examples/accuracy/BFKUGR.jpg
Binary file added tests/examples/accuracy/BFLLLA.jpg
Binary file added tests/examples/accuracy/BFMHHY.jpg
Binary file added tests/examples/accuracy/BFMNPA.jpg
Binary file added tests/examples/accuracy/BFNLTG.jpg
Binary file added tests/examples/accuracy/BFNYKJ.jpg
Binary file added tests/examples/accuracy/BFPATR.jpg
Binary file added tests/examples/accuracy/BFPFRP.jpg
Binary file added tests/examples/accuracy/BFUEMG.jpg
Binary file added tests/examples/accuracy/BGATRR.jpg
Binary file added tests/examples/accuracy/BGBABL.jpg
Loading