انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: پروژه OCR فارسی آزاد  (دفعات بازدید: 4853 بار)

0 کاربر و 4 مهمان درحال مشاهده موضوع.

آفلاین محمدرضا حقیری

  • High Sr. Member
  • *
  • ارسال: 528
    • ذهن زیبا
پاسخ : پروژه OCR فارسی آزاد
« پاسخ #15 : 13 تیر 1401، 06:25 ب‌ظ »
این پروژه فعلا به حالت Hold درآمده، تا بعدتر در موردش یه بازنگری بکنم.

آفلاین محمدرضا حقیری

  • High Sr. Member
  • *
  • ارسال: 528
    • ذهن زیبا
پاسخ : پروژه OCR فارسی آزاد
« پاسخ #16 : 04 امرداد 1401، 11:37 ق‌ظ »
دوستان در این مطلب وبلاگم در مورد پروژه توضیح دادم که چی شد شروع شد و تا اینجا چه کاری پیش رفته و چرا هولد شد.

آفلاین محمدرضا حقیری

  • High Sr. Member
  • *
  • ارسال: 528
    • ذهن زیبا
پاسخ : پروژه OCR فارسی آزاد
« پاسخ #17 : 03 آذر 1401، 12:48 ق‌ظ »
سلام مجدد (:

با این که انجمن این هشدار رو داد:

نقل‌قول
هشدار: این موضوع طی 120 روز اخیر هیچ ارسالی نداشته است.
با این شرایط آیا از ارسال پاسخ اطمینان دارید؟.

و خب قبل‌تر هم گفته بودم:

این پروژه فعلا به حالت Hold درآمده، تا بعدتر در موردش یه بازنگری بکنم.

حالا وقتشه که بگم بازنگری‌هایی که لازم بود رو تا حد زیادی در این قضیه انجام دادم. یکم بحث پیچیده‌تر از چیزی که فکر می‌کردم شد، ولی تا همینجایی که پیش رفته هم واقعا معجزه بوده برای خودش (:
حالا در بازنگری‌ها، یک سری مشکلاتی که خیلی می‌تونن موثر باشند رو جدا کردم که در موردش حرف بزنم:

۱. حروف فارسی، به هم می‌چسبند (حالا یا بدون هیچ فاصله‌ای یا با نیم‌فاصله) و این خودش یک مشکله در جداسازی حروف (در فارسی حروف با نقطه از هم جدا میشن. این خودش یکم باز قضیه رو پیچیده کرد ((:) 
۲. حروف شبیه به هم خیلی داریم. مثلا ج چ ح خ و تمیز دادن بین این‌ها یکم سخته، مگر این که یک سری برنامه مکمل برای OCR هم ساخته بشه، که بتونه نزدیک‌ترین کلمات به کلمات حدس‌زده شده رو، پیشنهاد بده. البته این رو بگم که این مشکل خاص رو با OCR انگلیسی هم دیدم که افراد دارند و اگر از یه حدی بیشتر نباشه فکر نکنم خیلی مشکل بغرنج و حادی باشه. یعنی اگر «اکرم» رو «رامین» تشخیص نده، اوکیه. ولی خب ممکنه «اکرم» رو «اگرم» تشخیص بده، یا حتی «چنار» رو «حنار» و این‌ها با یک سری ویرایش ساده توسط خود کاربران، درست میشن.
۳. مدل پایه‌ای که براش انتخاب شده، یکم زیادی کار می‌بره، ولی خب بهترین مدل موجود تشخیص شیء از نظر منه (دوستان متخصص و استاد، نظر منه، نه یک فکت علمی  ;D) و این خودش روند توسعه رو کمی کُند کرده.

همین دیگه، فعلا تا همینجای قضیه درآمده و امیدوارم بتونه بهتر هم بشه.
راستی برای تشخیص نسخه پزشک و تشخیص دست‌خط هم پیشنهاد‌هایی داشتم. شما هم اگر پیشنهادی دارید، ممنون میشم همینجا بگید.

آفلاین saleh143

  • Full Member
  • *
  • ارسال: 198
پاسخ : پروژه OCR فارسی آزاد
« پاسخ #18 : 03 آذر 1401، 06:29 ب‌ظ »
نقل‌قول
۲. حروف شبیه به هم خیلی داریم. مثلا ج چ ح خ و تمیز دادن بین این‌ها یکم سخته، مگر این که یک سری برنامه مکمل برای OCR هم ساخته بشه، که بتونه نزدیک‌ترین کلمات به کلمات حدس‌زده شده رو، پیشنهاد بده. البته این رو بگم که این مشکل خاص رو با OCR انگلیسی هم دیدم که افراد دارند و اگر از یه حدی بیشتر نباشه فکر نکنم خیلی مشکل بغرنج و حادی باشه. یعنی اگر «اکرم» رو «رامین» تشخیص نده، اوکیه. ولی خب ممکنه «اکرم» رو «اگرم» تشخیص بده، یا حتی «چنار» رو «حنار» و این‌ها با یک سری ویرایش ساده توسط خود کاربران، درست میشن.

یه سوال مثلا نمیشه خودش از دیتابیس کلمات رو حدس بزنه و اصلاح کنه که نیازی به ویرایش کاربر هم نباشه ؟  منظورم اینه که خب ما کلمه «حنار» و «اگرم» تو فارسی که نداریم

نقل‌قول
راستی برای تشخیص نسخه پزشک و تشخیص دست‌خط هم پیشنهاد‌هایی داشتم. شما هم اگر پیشنهادی دارید، ممنون میشم همینجا بگید.

OCR برای کتاب های چاپ قدیم برای استفاده در کتاب خوان ها

آفلاین محمدرضا حقیری

  • High Sr. Member
  • *
  • ارسال: 528
    • ذهن زیبا
پاسخ : پروژه OCR فارسی آزاد
« پاسخ #19 : 03 آذر 1401، 11:24 ب‌ظ »
نقل‌قول
یه سوال مثلا نمیشه خودش از دیتابیس کلمات رو حدس بزنه و اصلاح کنه که نیازی به ویرایش کاربر هم نباشه ؟  منظورم اینه که خب ما کلمه «حنار» و «اگرم» تو فارسی که نداریم

همین موضوع رو بهش اشاره کردم. خیلی خوبه که automate بشه.

نقل‌قول
OCR برای کتاب های چاپ قدیم برای استفاده در کتاب خوان ها

این تقریبا ویژنیه که همین پروژه باهاش شروع شده.

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : پروژه OCR فارسی آزاد
« پاسخ #20 : 05 آذر 1401، 12:56 ب‌ظ »
سلام
اول از همه خیلی ممنون محمدرضا جان بابت به اشتراک‌گذاری تجربه‌ها و پروژه‌هات با دنیای نرم‌افزار آزاد

یکم کدها رو یه نگاه سریعی کردم و این سوال برام پیش اومد که چرا tesseract نه؟ tesseract برای زبان فارسی هم هست و کیفیتش هم عالیه و به همراه یه spell-checker کیفیت قابل‌قبولی حتی برای production داره. (البته برای تسک OCR ونه handwritten recognition)

چیزی که از نوت‌بوک متوجه شدم ظاهراً مدل پایهٔ yolov5 برای این تسک استفاده شده. yolov5 توی تشخیص bboxها و classification اونا می‌تونه مفید باشه و کمک کنه ولی خب تسک object detection با character detection/recognition یه domain shift قابل توجه داره و لزوماً مدلی که اونور توانمند ظاهراً شده، اینور تضمینی برای کیفیتش نیست

اخیراً مدل‌های خوبی برای handwritten recognition هم رلیز شده ولی متأسفانه از فارسی پشتیبانی نمی‌کنن. این مدل‌ها هم تو بخش encoder و هم decoder از معماری ترنسفورمری استفاده می‌کنن و در صورت جمع‌آوری دیتای مناسب و trainشون، می‌تونیم مدل با خروجی ارزشمندی داشته باشیم

آفلاین محمدرضا حقیری

  • High Sr. Member
  • *
  • ارسال: 528
    • ذهن زیبا
پاسخ : پروژه OCR فارسی آزاد
« پاسخ #21 : 06 آذر 1401، 12:30 ق‌ظ »
نقل‌قول
یکم کدها رو یه نگاه سریعی کردم و این سوال برام پیش اومد که چرا tesseract نه؟ tesseract برای زبان فارسی هم هست و کیفیتش هم عالیه و به همراه یه spell-checker کیفیت قابل‌قبولی حتی برای production داره. (البته برای تسک OCR ونه handwritten recognition)

هیچ روش درست و مطمئنی متاسفانه نیافتم که آموزش رو روی تسرکت انجام بدم، از پارسال که چنین پروژه‌هایی رو شروع کردم.

نقل‌قول
چیزی که از نوت‌بوک متوجه شدم ظاهراً مدل پایهٔ yolov5 برای این تسک استفاده شده. yolov5 توی تشخیص bboxها و classification اونا می‌تونه مفید باشه و کمک کنه ولی خب تسک object detection با character detection/recognition یه domain shift قابل توجه داره و لزوماً مدلی که اونور توانمند ظاهراً شده، اینور تضمینی برای کیفیتش نیست

درسته دقیقا همینطوره، بخصوص برای حروف پیوسته مثل حروف فارسی.

نقل‌قول
اخیراً مدل‌های خوبی برای handwritten recognition هم رلیز شده ولی متأسفانه از فارسی پشتیبانی نمی‌کنن. این مدل‌ها هم تو بخش encoder و هم decoder از معماری ترنسفورمری استفاده می‌کنن و در صورت جمع‌آوری دیتای مناسب و trainشون، می‌تونیم مدل با خروجی ارزشمندی داشته باشیم

میشه چند مدل از این‌ها رو معرفی کنید لطفا؟  ;D

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : پروژه OCR فارسی آزاد
« پاسخ #22 : 06 آذر 1401، 10:21 ق‌ظ »
هیچ روش درست و مطمئنی متاسفانه نیافتم که آموزش رو روی تسرکت انجام بدم، از پارسال که چنین پروژه‌هایی رو شروع کردم.
ببین قبل اینکه train مدل رو شروع کنی، یه تست بکن ببین آیا مدل فعلی، نیازت رو مرتفع می‌کنه یا نه. ممکنه نیاز بشه که پشتیبانی از فونت‌های جدید رو بهش اضافه کنی ولی توی اکثر مواقع همین tesseract فعلی خوبه و معمولاً چیزی که نیازه پیش‌پردازش تصویر ورودیه نه train خود tesseract. برای tesseract فارسی تو کامند لاین:
sudo apt install -qq -y tesseract-ocr \
                    libtesseract-dev \
                    tesseract-ocr-eng \
                    tesseract-ocr-fas
tesseract ./myimage.png text_result -l fas --psm 6
cat text_result.txt

و برای tesseract تو پایتون:
اول نصب pytesseract
!pip install -q -U pytesseractو بعد هم:
import pytesseract
from PIL import Image

image = Image.open('./myimage.png')
custom_config = r'-l fas --oem 3 --psm 6'
text_result = pytesseract.image_to_string(image, config=custom_config)
print(text_result)

سعی کنین پارامتر psm رو هم یکم تغییر بدین و تأثیرش توی خروجی رو بررسی کنین. برای حریم segmentها توی تصویر صفحه استفاده می‌شه.

اگه تصویر ورودی کثیف بود، تار بود، متن خوانایی نداشت، لکه داشت، کج بود و ...، برای خروجی بهتر، نیاز به پیش‌پردازش داریم. برای شروع این داکیومنت خیلی خوبه:
https://tesseract-ocr.github.io/tessdoc/ImproveQuality.html

و در جواب سوال اصلی هم، برای train مدل‌های مختلف legacy و lstmای tesseract برای آموزش فونت‌های جدید و ...، این داکیومنت‌ها خوبن:
https://tesseract-ocr.github.io/tessdoc/tess4/TrainingTesseract-4.00.html
https://tesseract-ocr.github.io/tessdoc/tess5/TrainingTesseract-5.html

و این ریپو:
https://github.com/tesseract-ocr/tesstrain/wiki

درسته دقیقا همینطوره، بخصوص برای حروف پیوسته مثل حروف فارسی.
برای رفع همچین مشکلاتی جای تشخیص دقیق bbox، برو سراغ روش‌های مبتنی بر CTC Loss. احتمالاً جواب چیزی که دنباش هستی، اونجا باشه.

میشه چند مدل از این‌ها رو معرفی کنید لطفا؟  ;D
آره حتماً. مثلاً مدل TrOCR برای تشخیص دست‌خط انگلیسیش واقعاً عالی عمل می‌کنه. ولی خب برای فارسی باید دیتاستی مشابه دیتاست انگلیسی از دست‌خط‌ها و ... جمع‌آوری بشه:
https://huggingface.co/spaces/nielsr/TrOCR-handwritten


یه تصویر نمونه، به همراه خروجیش رو هم ضمیمه کردم. با یه spell-checker ساده و مبتنی بر unigram/bigram مثل symspell می‌شه یه متن بدون خطای تمیز داشت.
« آخرین ویرایش: 06 آذر 1401، 11:50 ق‌ظ توسط علی رزم دیده »