غلاف للعمل مع Tesseract OCR داخل PHP.
عبر الملحن:
$ composer require thiagoalessio/tesseract_ocr
هناك العديد من الطرق لتثبيت Tesseract OCR على نظامك، ولكن إذا كنت تريد فقط تشغيل شيء سريعًا، فإنني أوصي بتثبيت حزمة Capture2Text مع Chocolatey.
choco install capture2text --version 3.9
tesseract
.
باستخدام MacPorts، يمكنك تثبيت الدعم للغات الفردية، كما يلي:
$ sudo port install tesseract-<langcode>
ولكن هذا غير ممكن مع Homebrew. يأتي مع دعم اللغة الإنجليزية فقط بشكل افتراضي، لذلك إذا كنت تنوي استخدامه للغة أخرى، فإن الحل الأسرع هو تثبيتها جميعًا:
$ brew install tesseract tesseract-lang
use thiagoalessio TesseractOCR TesseractOCR ;
echo ( new TesseractOCR ( ' text.png ' ))
-> run ();
The quick brown fox
jumps over
the lazy dog.
use thiagoalessio TesseractOCR TesseractOCR ;
echo ( new TesseractOCR ( ' german.png ' ))
-> lang ( ' deu ' )
-> run ();
Bülowstraße
use thiagoalessio TesseractOCR TesseractOCR ;
echo ( new TesseractOCR ( ' mixed-languages.png ' ))
-> lang ( ' eng ' , ' jpn ' , ' spa ' )
-> run ();
I eat すし y Pollo
use thiagoalessio TesseractOCR TesseractOCR ;
echo ( new TesseractOCR ( ' 8055.png ' ))
-> allowlist ( range ( ' A ' , ' Z ' ))
-> run ();
BOSS
نعم، أعلم أن البعض منكم قد يرغب في استخدام هذه المكتبة لغرض نبيل وهو كسر اختبارات CAPTCHA، لذا يرجى إلقاء نظرة على هذا التعليق:
رقم 91 (تعليق)
ينفذ أمر tesseract
، ويتلقى اختياريًا عددًا صحيحًا كـ timeout
، في حالة مواجهة عمليات tesseract المتوقفة.
$ ocr = new TesseractOCR ();
$ ocr -> run ();
$ ocr = new TesseractOCR ();
$ timeout = 500 ;
$ ocr -> run ( $ timeout );
تحديد مسار الصورة التي سيتم التعرف عليها بواسطة tesseract
.
$ ocr = new TesseractOCR ();
$ ocr -> image ( ' /path/to/image.png ' );
$ ocr -> run ();
قم بتعيين الصورة ليتم التعرف عليها بواسطة tesseract
من سلسلة بحجمها. يمكن أن يكون هذا مفيدًا عند التعامل مع الملفات المحملة بالفعل في الذاكرة. يمكنك بسهولة استرداد بيانات الصورة وحجم كائن الصورة:
//Using Imagick
$ data = $ img -> getImageBlob ();
$ size = $ img -> getImageLength ();
//Using GD
ob_start ();
// Note that you can use any format supported by tesseract
imagepng ( $ img , null , 0 );
$ size = ob_get_length ();
$ data = ob_get_clean ();
$ ocr = new TesseractOCR ();
$ ocr -> imageData ( $ data , $ size );
$ ocr -> run ();
حدد موقعًا مخصصًا للملف القابل للتنفيذ tesseract
، إذا لم يكن موجودًا لأي سبب من الأسباب في $PATH
.
echo ( new TesseractOCR ( ' img.png ' ))
-> executable ( ' /path/to/tesseract ' )
-> run ();
إرجاع الإصدار الحالي من tesseract
.
echo ( new TesseractOCR ())-> version ();
إرجاع قائمة باللغات/النصوص المتاحة.
foreach (( new TesseractOCR ())-> availableLanguages () as $ lang ) echo $ lang ;
مزيد من المعلومات: https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc#languages-and-scripts
حدد موقعًا مخصصًا لدليل tessdata.
echo ( new TesseractOCR ( ' img.png ' ))
-> tessdataDir ( ' /path ' )
-> run ();
حدد موقع ملف كلمات المستخدم.
هذا ملف نصي عادي يحتوي على قائمة بالكلمات التي تريد اعتبارها كلمات قاموس عادية بواسطة tesseract
.
مفيد عند التعامل مع المحتويات التي تحتوي على مصطلحات فنية، أو مصطلحات، وما إلى ذلك.
$ cat /path/to/user-words.txt
foo
bar
echo ( new TesseractOCR ( ' img.png ' ))
-> userWords ( ' /path/to/user-words.txt ' )
-> run ();
حدد موقع ملف أنماط المستخدم.
إذا كانت المحتويات التي تتعامل معها لها أنماط معروفة، فيمكن أن يساعد هذا الخيار كثيرًا في دقة التعرف على tesseract.
$ cat /path/to/user-patterns.txt'
1-ddd-GOOG-441
www.n\*.com
echo ( new TesseractOCR ( ' img.png ' ))
-> userPatterns ( ' /path/to/user-patterns.txt ' )
-> run ();
حدد لغة واحدة أو أكثر لاستخدامها أثناء التعرف. يمكن العثور على قائمة كاملة باللغات المتاحة على: https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc#languages
نصيحة من @daijiale: استخدم المجموعة ->lang('chi_sim', 'chi_tra')
للتعرف الصحيح على اللغة الصينية.
echo ( new TesseractOCR ( ' img.png ' ))
-> lang ( ' lang1 ' , ' lang2 ' , ' lang3 ' )
-> run ();
حدد طريقة تجزئة الصفحة، التي ترشد tesseract
إلى كيفية تفسير الصورة المحددة.
مزيد من المعلومات: https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality#page-segmentation-method
echo ( new TesseractOCR ( ' img.png ' ))
-> psm ( 6 )
-> run ();
حدد وضع محرك التعرف الضوئي على الحروف. (انظر tesseract --help-oem
)
echo ( new TesseractOCR ( ' img.png ' ))
-> oem ( 2 )
-> run ();
حدد الصورة DPI. يكون ذلك مفيدًا إذا كانت صورتك لا تحتوي على هذه المعلومات في بياناتها الوصفية.
echo ( new TesseractOCR ( ' img.png ' ))
-> dpi ( 300 )
-> run ();
هذا اختصار لـ ->config('tessedit_char_whitelist', 'abcdef....')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> allowlist ( range ( ' a ' , ' z ' ), range ( 0 , 9 ), ' -_@ ' )
-> run ();
حدد ملف التكوين الذي سيتم استخدامه. يمكن أن يكون إما المسار إلى ملف التكوين الخاص بك أو اسم أحد ملفات التكوين المحددة مسبقًا: https://github.com/tesseract-ocr/tesseract/tree/master/tessdata/configs
echo ( new TesseractOCR ( ' img.png ' ))
-> configFile ( ' hocr ' )
-> run ();
تحديد ملف الإخراج المطلوب استخدامه. انتبه: إذا قمت بتعيين ملف إخراج، فسيتم تجاهل الخيار withoutTempFiles
. تتم كتابة (وحذف) ملفات Tempfiles حتى لو كان withoutTempFiles = true
.
بالاشتراك مع configFile
يمكنك الحصول على ملفات hocr
أو tsv
أو pdf
.
echo ( new TesseractOCR ( ' img.png ' ))
-> configFile ( ' pdf ' )
-> setOutputFile ( ' /PATH_TO_MY_OUTPUTFILE/searchable.pdf ' )
-> run ();
اختصار لـ ->configFile('digits')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> digits ()
-> run ();
اختصار لـ ->configFile('hocr')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> hocr ()
-> run ();
اختصار لـ ->configFile('pdf')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> pdf ()
-> run ();
اختصار لـ ->configFile('quiet')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> quiet ()
-> run ();
اختصار لـ ->configFile('tsv')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> tsv ()
-> run ();
اختصار لـ ->configFile('txt')
.
echo ( new TesseractOCR ( ' img.png ' ))
-> txt ()
-> run ();
قم بتحديد دليل مخصص لتخزين الملفات المؤقتة التي تم إنشاؤها بواسطة tesseract. تأكد من وجود الدليل بالفعل وأنه مسموح للمستخدم الذي يقوم بتشغيل php
بالكتابة هناك.
echo ( new TesseractOCR ( ' img.png ' ))
-> tempDir ( ' ./my/custom/temp/dir ' )
-> run ();
حدد أن tesseract
يجب أن يقوم بإخراج النص الذي تم التعرف عليه دون الكتابة إلى الملفات المؤقتة. يتم جمع البيانات من الإخراج القياسي لـ tesseract
بدلاً من ذلك.
echo ( new TesseractOCR ( ' img.png ' ))
-> withoutTempFiles ()
-> run ();
يمكن استخدام أي خيار تكوين تقدمه Tesseract على النحو التالي:
echo ( new TesseractOCR ( ' img.png ' ))
-> config ( ' config_var ' , ' value ' )
-> config ( ' other_config_var ' , ' other value ' )
-> run ();
أو هكذا:
echo ( new TesseractOCR ( ' img.png ' ))
-> configVar ( ' value ' )
-> otherConfigVar ( ' other value ' )
-> run ();
مزيد من المعلومات: https://github.com/tesseract-ocr/tesseract/wiki/ControlParams
في بعض الأحيان، قد يكون من المفيد تحديد عدد سلاسل الرسائل التي يُسمح لـ tesseract باستخدامها (على سبيل المثال، في هذه الحالة). قم بتعيين الحد الأقصى لعدد سلاسل الرسائل كمعلمة لوظيفة run
:
echo ( new TesseractOCR ( ' img.png ' ))
-> threadLimit ( 1 )
-> run ();
يمكنكم المساهمة في هذا المشروع من خلال:
فقط تأكد من إلقاء نظرة على قواعد السلوك وتعليمات المساهمة الخاصة بنا.
تم إصدار tesseract-ocr-for-php بموجب ترخيص MIT.
صنع مع في برلين