![](https://habrastorage.org/files/2d5/712/d31/2d5712d314e9436e991f13d4cc3cfabe.png)
åããã°ã©ã ã¯å°ãªããšã10åå éã§ããŸã
ã¹ããŒããšã³ãžã³éçºè ã¯ãŒã¯ã¹ããŒã¹
OCR Tesseractã§èªèãé«éåããããã®ããã€ãã®ãã¯ããã¯ã«ã€ããŠèª¬æããŸãã äžèšã®ãã¹ãŠã¯ããããžã§ã¯ãã®å®è£ ã§äœ¿çšãããŸããããã®æå³ã¯ãããžãã¹ããã¥ã¡ã³ãã®ããŒãžã®å€æ°ã®ç»åïŒãã¹ããŒããå¥çŽãå¥çŽãå§ä»»ç¶ãç»é²èšŒææžãªã©ïŒãåé¡ããçµæãé»åã¢ãŒã«ã€ãã«ä¿åããããšã§ããã åé¡ã¢ã«ãŽãªãºã ã®äžéšã¯ããŒãžã®å®éã®ç»åã®åæã«åºã¥ããŠãããäžéšã¯ç»åããæœåºãããããã¹ãã®åæã«åºã¥ããŠããŸããã ããã¹ããæœåºããã«ã¯OCRèªèãå¿ èŠã§ããã
ãããžã§ã¯ãã®æ©èœïŒå®æåã®è³Œå ¥ã§ã¯ååŸã§ããªããäºåèšå®ãããããããã£ãæã€ãœãããŠã§ã¢ãŸãã¯ããŒããŠã§ã¢ãšãœãããŠã§ã¢ã®è€åäœãäœæããããã«èšèšãããã«ã¹ã¿ã äœæ¥ïŒã¯ãè«è² æ¥è ã®æéå¶éãšãªãœãŒã¹å¶éã®ååšã§ãã èšãæããã°ããããžã§ã¯ãã§ã¯ãè«è² æ¥è ã¯åžžã«èªåãé©åãšèããåé¡ã解決ããèœåãæã£ãŠããããã§ã¯ãªããæéããã®ä»ã®å¶éãæºããã€ã€å¿ èŠãªæ©èœãéæã§ãã劥åæ¡ãæ¢ãããšãäœåãªããããŠããŸãã ãã®ãããžã§ã¯ãã§ã¯ã8æéã§60,000ããŒãžãèªèããæ¹æ³ããã°ããèŠã€ããå¿ èŠããããŸããã ããŸããŸãªçç±ãããç¡æã®ããã¹ãèªèãœãããŠã§ã¢ã䜿çšããOCR TesseractãéžæããŸããã éžæã®åºæºã¯ãããã¹ãèªèã®èš±å®¹å¯èœãªå質ã§ãããåŸç¶ã®åé¡ã®å質ãä¿èšŒããŸããã
ã·ã¹ãã ã®å®å šã«æ©èœããã¬ã€ã¢ãŠããçµã¿ç«ãŠãåŸïŒãã«ããã¹ãOCRã«å ããŠãããŒã³ãŒããèªèããããã¥ã¡ã³ãã®ããŒãžç»åãåæããããŒãžãã€ã³ããŒãããŠçµæããšã¯ã¹ããŒãããæ©èœããããŸããïŒãäœæããããœãããŠã§ã¢ã¯ã·ã¹ãã ã®æ©èœãå®èšŒããããã§ãéåžžã«ãã£ãããšåäœããããšãããããŸããã ããšãã°ãããã¥ã¡ã³ãã®100ããŒãžã®ãã¹ãããã¯ã®åŠçã«ã¯1æé以äžãããããšãå€æããŸãããããã¯ã顧客ã«èŠããããã«ã¯å®ç§ã§ã¯ãããŸãããå ã®100ããŒãžãé»åã¢ãŒã«ã€ãã«éããããŸã§åŸ ã¡ãŸããã
ããã©ãŒãã³ã¹åæã«ãããã»ãšãã©ã®æéãTesseractèªèã«è²»ããããŠããããšã瀺ãããŸããã Tesseractã®ããã©ãŒãã³ã¹ã«é¢ããæ å ±ïŒã€ã³ã¿ãŒããããšå°é家ãžã®åãåããã®äž¡æ¹ïŒãæ€çŽ¢ãããšãããå€ãã®ãŠãŒã¶ãŒããã®OCRãååã«é«éã§ã¯ãªãããšã«æ°ä»ããTesseractãé«éåããããã®æšå¥šäºé ã¯ãã©ã€ããŒãã§ãããå®éšçã«æ€èšŒããå¿ èŠããããŸãã èªèé床ãäžããããã€ãã®æ¹æ³ããã¹ãããã·ã¹ãã å šäœã®å€§å¹ ãªé«éåã«ã€ãªãã£ãæ¹æ³ã«ã€ããŠèª¬æããŸããã
ä»»æã®ããã°ã©ã ãå éããæ¹æ³ã¯ã次ã®ãããªããã€ãã®ã°ã«ãŒãã«åããããšãã§ããŸãã
- 䜿çšãããã¢ã«ãŽãªãºã ã®æé©åã
- 䜿çšãããã¢ã«ãŽãªãºã ã®ãã©ã¡ãŒã¿ãŒã®éžæã
- ææ°ã®ããã»ããµæè¡ã䜿çšããã³ã³ãã€ã«ã®æé©åã
- åŠçã¢ã«ãŽãªãºã ã®äžŠååã
Tesseractèªäœãæé©åããå¯èœæ§ããå§ããŸãããã ããŒãžã§ã³3.04.00ã®å ŽåãSSE2æé©åãåããMicrosoft Visual Studio 2013ã䜿çšããŠã·ã³ã°ã«ã¹ã¬ããã·ã¹ãã ãæ§ç¯ããããã®ãããã¡ã€ã©ãŒãçµã¿èŸŒãŸããŠãããããTesseractã®åèšå®è¡æéã®15-25ïŒ ã1ã€ã®é¢æ°IntegerMatcher :: UpdateTablesForFeatureã«å«ãŸããŠããŸãã çè«çã«ã¯ããã®é¢æ°ã¯ã¢ã«ãŽãªãºã ã®æé©åã®åè£ã§ãããIntegerMatcher :: UpdateTablesForFeatureé¢æ°ã®ã³ãŒãããå°ãªããšãããŒã¿ç·šæãšåŠçæäœã®æ°ã®èŠ³ç¹ããæããã«ç¹°ãè¿ãæé©åãããŠããããšã¯å®¹æã«ããããŸãã ãã®ãããªæé©åã®å¯èœæ§ã«ã¯ããããžã§ã¯ãã§èš±å®¹ã§ããªãæéã®æ¶è²»ãæããã«å¿ èŠã§ãããšããçµè«ã«éããŸããã ãããã£ãŠãããåçŽãªæé©åæ¹æ³ã«ç§»ããŸããã
䜿çšããäž»ãªTesseract APIãã©ã¡ãŒã¿ãŒã«ã€ããŠèª¬æããŸãã åæåã¯é«éã¢ãŒãã§å®è¡ãããŸããïŒapi.InitïŒïŒã¡ãœããã®tesseract :: OEM_TESSERACT_ONLYïŒã äžéšã®ããã¥ã¡ã³ãã¯ã©ã¹ã§ã¯ããŒãžã¿ã€ãã«ãåæããã ãã§ã¯äžååã§ãããããŒãžã®äžéšã§åèªæ€çŽ¢ãå¿
èŠã«ãªããããããŒãžé åå
šäœãèªèãããŸããã èªèèšèªãrus + engãã䜿çšãããŸãããããã¯ããã·ã¢èªãšè±èªã®äž¡æ¹ã®åèªã䜿çšããŠå°å·ãããããžãã¹ææžã«èªç¶ã«èŠããŸãã ããŒãžã¯ã«ã©ãŒç»åã§è¡šãããŠããŸããããå®éã«ã¯å€ãã®ããŒãžãã°ã¬ãŒã¹ã±ãŒã«ã§ããã
ãããã®ãã©ã¡ãŒã¿ã®äžéšãå€æŽãããšãèªèã倧å¹
ã«å éããŸããã
Tesseractã®ããã©ãŒãã³ã¹ã¯ãIntel®CoreïŒTMïŒi7-4790 CPU 3.60 GHzã16.0 GBã4ã€ã®ç©çã³ã¢ãš8ã€ã®HTã³ã¢ãåããWindows 7 prof 64ãããã§è©äŸ¡ãããŸããã 以äžã«èª¬æãããã¹ãŠã®å®éšã§ã¯ãããŸããŸãªã¿ã€ããããŸããŸãªè²ïŒã°ã¬ãŒã¹ã±ãŒã«ãšã«ã©ãŒïŒãããŸããŸãªè§£å床ïŒ150ãã300 dpiïŒãããŸããŸãªå質ïŒã¯ãªãŒã³ã§ãã€ãºã®å€ãïŒãããã³ããŸããŸãªããŒãžãããã®æåæ°ã Tesseractã®ããã©ãŒãã³ã¹ã¯ã1ããŒãžã®èªèæéã®çŽæ¥æž¬å®ã䜿çšããŠè©äŸ¡ãããŸããã
åæãã©ã¡ãŒã¿ãŒã䜿çšãã300ããŒãžãã¹ãŠã®èªèã«ã¯t = 4928.53ç§ãããã1ããŒãžt cpã®å¹³åèªèæéã¯16.43ç§ã1ããŒãžã®æå°èªèæét min = 0.99ç§ãæ倧t max = 143ç§ã§ããã 21ç§ 0ã150ã®ç¯å²ã§10ç§ã®æéééãæ€èšããŸããèªèæéã®ã°ãã€ãã¯ãééã®ããããã«è©²åœããèªèæéãå«ãããŒãžæ°ã®ãã¹ãã°ã©ã ã§ç€ºãããŸãã
![](https://habrastorage.org/files/d25/c85/eb8/d25c85eb84cc41c09bbac003b982599b.png)
åæ§ã«ã察å¿ããééããã®ãã¹ãŠã®ããŒãžã®èªèã«è²»ããããåèšæéã®ã°ã©ãïŒ
![](https://habrastorage.org/files/00f/dd9/9cd/00fdd99cdc8f4ab693828b8620483d1b.png)
å®æ§çã«å€§ããªæ£åžã¯ããã¹ãã»ããã®ããŸããŸãªããŒãžç»åã«ãã£ãŠèª¬æãããŸãã èæ ®ãããããŒãžã®ã»ããã§ã¯ãå€ãã®æåãŸãã¯æåã«é¡äŒŒãããªããžã§ã¯ããå«ãããŒãžã«æ倧ã®æéãè²»ããããŸãã
é«éåããããã«ããŸãèªèèšèªããrus + engããããrusãã«å€æŽããŸããã ããã¯ãããªã«æåã§å°å·ãããåèªã®ã¿ã®åæã§æ§æãããããããªãåé¡ã®ããã®ã¢ã«ãŽãªãºã ã®å€æŽã«ããå¯èœã«ãªããŸããã ããã©ãŒãã³ã¹ã®åäžãã©ããªããèŠãŠã¿ãŸãããïŒåèšæét = 3262.33ç§ã1ããŒãžã®å¹³åèªèæét cp = 10.87ç§ã1ããŒãžã®æå°èªèæét min = 0.99ç§ãæ倧t max = 83.07 ã
ãã®çµæãåããŒãžã®èªèãŸãŒã³ãå¶éãããŸããã ãããè¡ãããã«ãçŽ5,000ããŒãžã®ãã¬ãŒãã³ã°ã»ããã§ãåé¡ã«å¿ èŠãªãã¹ãŠã®ããŒã¯ãŒãããã®é åã«ãããšããå¶éãéžæããããããªããŒãžã³ã§ãããŒãžã®é«ã70ïŒ ãå¹ 90ïŒ ã®å¶éãéžæããŸããã åœç¶ããã®å¶éã«ãããTesseractã¯ããéãèªèãå§ããŸããïŒåèšæét = 2649.57ç§ã1ããŒãžã®å¹³åèªèæét cp = 8.83ç§ã1ããŒãžã®æå°èªèæét min = 0.83ç§ãæ倧t max = 77.64ã
äž¡æ¹ã®ãã©ã¡ãŒã¿ãŒã®å€æŽã¯ãããžã§ã¯ãã®ä»æ§ã®çµæãšããŠã®ã¿å¯èœã«ãªã£ãããšã«æ³šæããŠãã ãããä»ã®æ¡ä»¶ã§ã¯ãããæ©èœããªãå ŽåããããŸããããšãã°ãå ¥åã¹ããªãŒã ã«è±èªã®ããã¥ã¡ã³ããããå Žåãèªèèšèªã¯ãrus + engãã®ãŸãŸã«ããå¿ èŠããããŸãã
ãããããã®ãããªå¹žéã®åŸãããŒãžåŠçãé«éåããããã®ã¢ã«ãŽãªãºã ãæ¢ãç¶ããŸããã èªèåã«ããŒãžç»åãäºå€åããæé ã¯éåžžã«å¹æçã§ããããšãå€æããŸããã äºå€åã®æåã®ç®æšã¯ãè€éãªèæ¯ãšåœ¢æ åŠçæäœã®é€å»ã«ããèªè粟床èªäœã®æ¹åãæ€èšããããšã§ãã ããããäºå€åãè¯å¥œãªå éãäžããŸããïŒt = 2293.20 sãt cp = 7.64 sãt min = 0.98 sãt max = 59.83 sã ãããã®æéã¯ãåäžèšèªãrusããã€ã³ã¹ããŒã«æžã¿ãã¬ãŒã 0.7x0.9ãããã³äºå2å€åã®èªèã®å Žåã«ååŸãããŸããã æå®ã®æéã«ã¯ãTesseractã®åèšèªèæéãš2å€åã®æéãå«ãŸããããšã匷調ããŸãã
äºå€åã¯ãèªèã®é«éåãšèªè粟床ã®åäžã®äž¡æ¹ãå¯èœã«ããæ®éçãªææ³ã§ãããšæ³å®ããŠããŸãã
次ã«ãã³ã³ãã€ã«ã䜿çšããæé©åã«ã€ããŠèª¬æããŸãã 以åã®ãã¹ãŠã®å®éšã¯ãVisual Studio 13ã³ã³ãã€ã©ãŒïŒããŒãžã§ã³12.0.40629.00 Update 5ïŒã䜿çšããŠå®è¡ãããŸããã ã€ã³ãã«C ++ã³ã³ãã€ã©ãŒXE 15.0ã§ã³ã³ãã€ã«ãããšã2å€åããã¬ãŒã ãããã³1ã€ã®èšèªã䜿çšãã以åã®ããŒãžã§ã³ãšæ¯èŒããŠãé«éåãåŸãããŸãããt= 2156.00ç§ãt cp = 7.19ç§ãt min = 0.76ç§ãt æ倧 = 59.66ç§ AVX2ã¢ãŒããã¯ãã£ã®æé©åãªãã·ã§ã³ãã³ã³ãã€ã©ã«æå®ãããŸããã SSE4.2ã¢ãŒããã¯ãã£ã®å Žåãçµæã¯ã»ãŒåãã§ãããAVX2ã¢ãŒããã¯ãã£ã®çµæããåªããŠããããã§ã¯ãããŸããã ã€ã³ãã«ã³ã³ãã€ã©ãŒã¯ãTesseractã ãã§ãªããã·ã¹ãã ã§äœ¿çšãããä»ã®ãã¹ãŠã®ã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ãæé©åã§ããããšãããã§èšåããå¿ èŠããããŸãã
ããã«ãããšãã°TessBaseAPI :: ProcessPagesã¡ãœããã®å Žåã1ããŒãžã®èªèæéãå¶éããã¿ã€ã ã¢ãŠãã®èšå®ã䜿çšã§ããŸãã 次ã«ãã¿ã€ã ã¢ãŠãå€ã30,000ããªç§ã®å ŽåãçµæãåŸãããŸããt= 2087.10ãt cp = 6.96ãt min = 0.76ç§ãt max = 30.00ç§ã ãã ããã¿ã€ã ã¢ãŠãã«ãã£ãŠæåŠãããããŒãžãåé¡ã§ããªãããšã«é¢é£ããŠèŠ³æž¬ãããæ倱ã®2ã€ã®çç±ã«ããããã®æé©åæ¹æ³ãæŸæ£ããŸããã
æ確ã«ããããã«ã説æããå®éšã®çµæãè¡šã«ä¿åããŸããã
ãã | æé©åæ¹æ³ | ç·æé
tïŒç§ïŒ | å¹³åæé
t cp ïŒç§ïŒ | æçæé
t å ïŒç§ïŒ | æ倧æé
t max ïŒç§ïŒ |
---|---|---|---|---|---|
1 | ãœãŒã¹ããŒãžã§ã³ | 4928.53 | 16,43 | 0.99 | 143.21 |
2 | ãrus + engãã®ä»£ããã«èšèªãrusã | 3262,33 | 10.87 | 0.99 | 83.07 |
3 | èªèãŸãŒã³å¶éä»ãã®ãªãã·ã§ã³2 | 2649.57 | 8.83 | 0.82 | 78.38 |
4 | äºåäºå€åã®ãªãã·ã§ã³3 | 2293.20 | 7.64 | 0.98 | 59.83 |
5 | AVX2ã³ã³ãã€ã©çšã«æé©åããããªãã·ã§ã³4 | 2156.00 | 7.19 | 0.76 | 59.66 |
è¡šãããæ¡çšãããæé©åæ¹æ³ïŒãªãã·ã§ã³5ïŒã®çµæãšããŠããã¹ãŠã®ããŒãžã®åèšèªèæéãå ã®ããŒãžã§ã³ã®åèšæéã«å¯ŸããŠ2å以äžæžå°ããããšãããããŸãã åæã«ãéžæããã2å€åã¢ã«ãŽãªãºã ã«ãããèªèã®å質ãšããŒãžã³ã³ãã³ãã®ãã®åŸã®åæãæ¹åãããŸããã ãã®åŠçã«ããã8æé以å ã«ããã8 60 60 / 7.19â4005ã®ããŒãžæ°ãèªèãããŸãã
次ã®å³ã§ã¯ãèæ ®ããããã¹ãŠã®æé©åãªãã·ã§ã³ã«ã€ããŠãèªèæéã10ç§ééã®ããããã«è©²åœããããŒãžæ°ã®ãã¹ãã°ã©ã ãšãåãééã®ãã¹ãŠã®ããŒãžã®èªèã«è²»ããããåèšæéã®ã°ã©ãã瀺ãããŠããŸãã
![](https://habrastorage.org/files/05a/e9c/193/05ae9c1934fc42028d526754b25491e4.jpg)
![](https://habrastorage.org/files/c3c/d34/4a4/c3cd344a48744c98b0fe8ab11952ffe4.png)
ãªãã·ã§ã³4ããã³5ã®ã°ã©ãã§ãçºçããæéã®é »åºŠã1ç§ééã«åããŠæ€èšããŠãã ããã ãã®ã°ã©ãã¯ãAVX2ã¢ãŒããã¯ãã£ã®æé©åã«ããããã¹ãŠã®ééã§ããŒãžèªèæéãççž®ãããããšã瀺ããŠããŸãã
![](https://habrastorage.org/files/fe7/051/834/fe70518348854ca7bb079f83420dd75f.png)
ãªãã·ã§ã³4ããã³5ã®å ŽåãTessractã®åèšåäœæéã®å€ïŒè¡šã®åã«èªèãš2é²åã®åèšæéã®å€ã瀺ãããŠããŸãïŒã¯2091.86ããã³1993.27ç§ã§ããã€ãŸããAVX2ã¢ãŒããã¯ãã£ã®æé©åã«ããTesseractèªäœãçŽ5ïŒ å éãããŸãã
倧éã®ããŒãžã®èªèã¯ãã¹ã±ãŒãªã³ã°ãªãã§ã¯æŽçã§ããªãããšã¯æããã§ãã ã¹ã±ãŒãªã³ã°æã«ã¯ããã«ãã¹ã¬ãããšãã«ãããã»ãã·ã³ã°ã®äž¡æ¹ã䜿çšããŸããã åæã«ãã³ã³ãã¥ãŒãã£ã³ã°ã¢ãžã¥ãŒã«ã®è² è·åæ£ã¢ã«ãŽãªãºã ã«ãéèŠãªæ³šæãæãããŸããã ãã®ã·ã¹ãã ã¯ãMPIã䜿çšããã«ç¬ç«ããŠå®è£ ãããŸããã 以åã«äœ¿çšããã³ã³ãã¥ãŒã¿ãŒãšäžèŽãã1ã€ã®ããŒãã§300ãã¹ãããŒãžãã¹ãŠã®åŠçå®éšïŒTesseractèªèã ãã§ãªããä»ã®ãã¹ãŠã®ã¿ã€ãã®åŠçïŒãå®è¡ãã300ããŒãžãã¹ãŠã®åŠçæétãè©äŸ¡ããŸãã çµæã¯è¡šã«ãŸãšããããŠããŸãã
ããã»ã¹æ° | ããã»ã¹å ã®ã¹ã¬ããã®æ° | åèšæétïŒç§ïŒ | å¹³åæét cp ïŒç§ïŒ |
---|---|---|---|
1 | 1 | 2361 | 7.87 |
1 | 2 | 1318 | 4.39 |
1 | 3 | 829 | 2.76 |
1 | 4 | 649 | 2.16 |
2 | 1 | 1298 | 4.33 |
2 | 2 | 789 | 2.63 |
2 | 4 | 485 | 1,62 |
2 | 8 | 500 | 1,67 |
è¡šããã2ã€ã®ã¢ããªã±ãŒã·ã§ã³ãèµ·åããããããããããŒãžãåŠçããããã®4ã€ã®ã¹ããªãŒã ãäœæããããšãã«ãæè¯ã®çµæïŒ1ããŒãžã®åŠçããã1.62ç§ïŒãéæãããããšãããããŸãã ãã®æéã¯ã次ã®8æé以å ã«ããã8 60 60 / 1.62 = 17778ã®ããŒãžæ°ãèªèãããå Žåã«å¯Ÿå¿ããŸãã ã€ãŸããããŒãžåŠçé床ãçŽ10åã«ãªããŸããã 宣èšããã60,000ããŒãžã®ããªã¥ãŒã ã8æéã§åŠçããã«ã¯ã4ã€ã®åæ§ã®ããŒããå¿ èŠã§ãã
ãã¡ãããåæ§ã®ãããžã§ã¯ãã§ã¯ã䞊ååãåŠçé床ãåäžãããããã®æãå¹æçãªããŒã«ã§ãããšäž»åŒµã§ããŸããã説æããæé©åäœæ¥ã«ãããåŠçãããã«2åããŸãã¯åãããã«ããŒãæ°ã2åæžããããšãã§ããŸããã
çµè«ãšããŠãååãªç©ºãæéãšååãªãªãœãŒã¹ãããã°ããååããå®è¡ããããšã«èå³ãããå®éšãšç 究ããªã¹ãããŸãã
- é¢æ°IntegerMatcher :: UpdateTablesForFeatureãå€æŽããŠãTesseractã®ããã©ãŒãã³ã¹ãæåã§æé©åã§ãããã©ããã調æ»ããŸãã
- Xeon Phiããã»ããµäžã®AVX512ã¢ãŒããã¯ãã£ã§ãã¹ãããŸãã
- Tesseract GPUããã©ãŒãã³ã¹æé©åãªãã·ã§ã³ãã芧ãã ããã