I had a quick thought about what you could offload to opencl. I will need
some help from you people (I am a C programmer, not C++, at least not
experienced) to do the host code, but this algorithm is perfectly
optimizeable in openCL.
the way I'd do it:
prerequirements:
- you can define 65k offsets (x,y) in whose you want the openCL engine to
look for dots (x,y), the optimal position and closest neighbour can be
reported in the first part.
- you can make a RAW image of both the image and the characters. size of
the letters doesn't matter, but they must be trimmed properly
1. you give me a matrix of 256*256 offsets(short, short) to analyze, with a
max of 64 dots (char, char) (I assume these are neurons) to analyze in each
offset.
so, this gives you a start memory usage of 2⁸ * 2⁸ *4 + 64*2 = 256k + 128
bytes
each dot MUST contain a black pixel.
then we add the image, this is a charimage of max (to be discussed with you
guys), I assume a 4096*4096 pixel image would be fine, especially when a
character can contain a 4x4 matrix defining a 0/1 (black/white) value.
2. Then I follow these steps in the openCL engine:
- we analyze the neurons
- draw a cirle around them of x black points. (this circle can be 0, in
which case the neuron is white), for which the circle is completely black
- when we encounter one or more white points, a direction of the points
is calculated. if there's no whitespace at the other side, the neuron
offset is moved for x/2 in the opposite direction and analyze neuron is
restarted for x/2. else, quit the 'analyze neuron' part. This can be done
in local memory, in which case it will cost you 256*2=512 bytes of local
ram to determine the optimal neuron position. Most graphic cards have a
limit of 32k ram, so this is no problem :-)
- determine the closest dot next to this one:
for each dot != this one, draw a line of black points, if no line can
be found, jump to next dot.
watch distance. If it's smaller than the previous neuron && this dot
id hasn't a link pointing from the destination to this one, save dot id.
so, at the end:
- each neuron of each offset is optimally centered in a return matrix
of 256*256*64*2 = 2²³ = 8M of memory
- each neuron has a unique id to its closest neighbour, to which it's
guaranteed to be attached. an id of -1 means no id could be found.
256*256*64 = 4M of memory
3. we focus on neuron list -> character mapping. this is a separate kernel.
A "probability" factor is involved here, but I will think about it
further. I suggest to use a list of 64 character images at once, otherwise
you need lots of memory :-)
- define the top, left and right neuron. create a zoom factor for the
image. calculate the aspect ratio. The probability is
1-diff(aspect_ratio1, aspect_ratio2)
- analyze each link in the font character. total probability *=
(found_link_length / total_link_length)
- report the probability.
On the PC: the character with the highest probability is the character you
're looking for. Be aware that you need to compare the possibilities of
the different offsets if they overlap.
if the tesseract project can use this, please let me know
2018-04-27 9:36 GMT+00:00 Zdenko Podobny <[email protected]>:
> Only documentation we have is code itself ;-) But you can start with
> searching for opencl issue in tesseract issue tracker on github...
>
> Zdenko
>
>
> pi 27. 4. 2018 o 10:56 Janpieter Sollie <[email protected]>
> napísal(a):
>
>> I'd be glad to help. using tesseract 4, I am able to perform a 90%
>> accuracy on OpenCL. I do not have any experience with neural networks (i'm
>> just a high-school (no college educated IT-support guy with some knowledge
>> about OpenCL), so can you recommend me some documentation to understand the
>> engine of tesseract 4?
>>
>> 2018-04-27 10:50 GMT+02:00 Zdenko Podobny <[email protected]>:
>>
>>> If you have experience your help will be warmly welcomed.
>>> OpenCL is not maintained and it is on good way to be removed if
>>> maintainer/contributor will not be found.
>>> Anyway it is not used extensively, so there is a place for improvement,
>>>
>>> Zdenko
>>>
>>>
>>> pi 27. 4. 2018 o 10:21 Janpieter Sollie <[email protected]>
>>> napísal(a):
>>>
>>>> Hello everyone,
>>>>
>>>> I have a question about the openCL selection procedure of tesseract:
>>>>
>>>> my output:
>>>>
>>>> [DS] Profile read from file (tesseract_opencl_profile_devices.dat).
>>>> [DS] Device[1] 1:Fiji score is 0.202927
>>>> [DS] Device[2] 1:Ellesmere score is 1.468799
>>>> [DS] Device[3] 1:Ellesmere score is 1.468799
>>>> [DS] Device[4] 1:Bonaire score is 1.533776
>>>> [DS] Device[5] 1:Tonga score is 0.184236
>>>> [DS] Device[6] 0:(null) score is 1.123015
>>>> [DS] Selected Device[5]: "Tonga" (OpenCL)
>>>>
>>>> Ugh, this is weird .. why does tesseract take my Tonga instead of my
>>>> fiji device? can I force it to use the fiji?
>>>> I understand the ellesmere have lower access times (they 're behind a
>>>> pcie switch), but fiji and tonga are both directly connected via a pcie 2.0
>>>> X16 bus. Do we need a better tesseract selection procedure?
>>>> If so, I'm quite skilled at opencl, I'd be glad to help!
>>>>
>>>> kind regards,
>>>>
>>>> Janpieter
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "tesseract-ocr" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at https://groups.google.com/group/tesseract-ocr.
>>>> To view this discussion on the web visit https://groups.google.com/d/
>>>> msgid/tesseract-ocr/4568b2b8-532d-457c-920b-60407e7b278e%
>>>> 40googlegroups.com
>>>> <https://groups.google.com/d/msgid/tesseract-ocr/4568b2b8-532d-457c-920b-60407e7b278e%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "tesseract-ocr" group.
>>> To unsubscribe from this topic, visit https://groups.google.com/d/
>>> topic/tesseract-ocr/uNRDFTavDfc/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to
>>> [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at https://groups.google.com/group/tesseract-ocr.
>>> To view this discussion on the web visit https://groups.google.com/d/
>>> msgid/tesseract-ocr/CAJbzG8wHCUBmAs3Q8%3D%2BzBPODuuDPS2g%3DZ-6Gve%
>>> 3DLWpzVWwvTkw%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/tesseract-ocr/CAJbzG8wHCUBmAs3Q8%3D%2BzBPODuuDPS2g%3DZ-6Gve%3DLWpzVWwvTkw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "tesseract-ocr" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/tesseract-ocr.
>> To view this discussion on the web visit https://groups.google.com/d/
>> msgid/tesseract-ocr/CAJEYFEaZNSWsV-hL-9DYWJahUR-8_
>> 3Wi%2BO5XwRkwFPWZHZgSOA%40mail.gmail.com
>> <https://groups.google.com/d/msgid/tesseract-ocr/CAJEYFEaZNSWsV-hL-9DYWJahUR-8_3Wi%2BO5XwRkwFPWZHZgSOA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "tesseract-ocr" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/
> topic/tesseract-ocr/uNRDFTavDfc/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/tesseract-ocr.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/tesseract-ocr/CAJbzG8yBJ8UcP-Oy-fkJ_zcszj2OUDag3zJdEd_qZbQpD0F6Yg%
> 40mail.gmail.com
> <https://groups.google.com/d/msgid/tesseract-ocr/CAJbzG8yBJ8UcP-Oy-fkJ_zcszj2OUDag3zJdEd_qZbQpD0F6Yg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"tesseract-ocr" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/tesseract-ocr.
To view this discussion on the web visit
https://groups.google.com/d/msgid/tesseract-ocr/CAJEYFEYVKhsUxP280ZXwMZoS262d8scEbYrCF9QE-0BseUdg6w%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.