اذهب إلى المحتوى
  • 0

اكتشاف النص واستخراجه باستخدام OpenCV

Ali Ismael

السؤال

Recommended Posts

  • 1

يمكنك أن تستخدم OpenCV و OCR، لذا  بدايةً تحتاج إلى تثبيت الملف tesseract.exe  التالي من غيتهاب https://github.com/UB-Mannheim/tesseract/wiki إضافةً إلى الحزمة pytesseract كما يلي:

pip install pytesseract

الآن اتبع التعليمات التالية:

import cv2
import pytesseract # pip install pytesseract
# حدد المسار الذي قمت فيه بتثبيت الملف
pytesseract.pytesseract.tesseract_cmd = 'tesseract.exe'
# إقرأ الصورة
img = cv2.imread("sample.jpg")
# قم بتحويل الصورة إلى الصيغة الرمادية
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

والآن قم بتطبيق إحدى تقنيات التعتيب وهناك 3 أنواع للتعتيب يمكنك تطبيقها في CV2  : التعتيب البسيط+التعتيب المتكيف+تعتيب أوتسو وسنستخدم تعتيب أوتسو هنا:

ret, thresh1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)

حدد شكل البنية وحجم النواة. حيث أن حجم النواة يزيد أو ينقص مساحة المستطيل المراد اكتشافه. قيمة أصغر مثل (10 ، 10) ستكتشف كل كلمة بدلاً من جملة:

rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (18, 18))

ونطبق عملية تمديد للصورة:

dilation = cv2.dilate(thresh1, rect_kernel, iterations = 1)

اكتشاف الملامح contours:

contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)

إنشاء نسخة من الصورة وملف نصي:

im2 = img.copy()
# إنشاء ملف نصي
file = open("recognized.txt", "w+")
file.write("")
file.close()

نقوم بالتكرار بحلقة على ال contours  ثم يتم اقتصاص الجزء المستطيل وتمريره إلى pytesseract لاستخراج النص منه ثم كتابة النص المستخرج في الملف النصي:

for cnt in contours:
	x, y, w, h = cv2.boundingRect(cnt)	
	# رسم مستطيل على الصورة المنسوخة
	rect = cv2.rectangle(im2, (x, y), (x + w, y + h), (0, 255, 0), 2)	
	# اقتصاص كتلة النص لإعطاء مدخلات إلى التعرف الضوئي على الحروف
	cropped = im2[y:y + h, x:x + w]
	# append فتح الملف ونحدد له وضع التحديث 
	file = open("recognized.txt", "a")
	# OCR تطبيق 
	text = pytesseract.image_to_string(cropped)
	# كتابة النص إلى الملف
	file.write(text)
	file.write("\n")
	# إغلاقه
	# Close the file
	file.close
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

يمكنك استخدام المكتبة pytesseract بسهولة مع opencv من أجل استخرجا الكلمات من الصور دون الحجاة الى اللجوء لنماذج معقدة من deep learning وغيرها.

في البداية عليك تنزيل المكتبة من ال terminal كالتالي:

pip install pytesseract

بعد ذلك أنظر الكود التالي والذي يوضح بشكل سهل كيفية أداء المهمة ببساطة:

#استدعاء المكتبات
import cv2
import pytesseract
pytesseract.pytesseract.tesseract_cmd=r'C:Program FilesTesseract-OCRtesseract.exe'

#قراءة الصورة
img = cv2.imread("image.jpg")
#تحجيم الصورة
img = cv2.resize(img, (400, 450))
#عرض الصورة
cv2.imshow("Image", img)
#استخراج الكلمات من الصورة
text = pytesseract.image_to_string(img)
#طباعة الكلمات
print(text)
cv2.waitKey(0)
cv2.destroyAllWindows()

وتكون ناتج استخراج الكلمات من الصورة كالتالي:

58994output.thumb.png.d65d59a9aad49815de75a6c1cf8f4ea4.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

شكرا جزيلا

بتاريخ On 21‏/10‏/2021 at 19:57 قال Ali Haidar Ahmad:

يمكنك أن تستخدم OpenCV و OCR، لذا  بدايةً تحتاج إلى تثبيت الملف tesseract.exe  التالي من غيتهاب https://github.com/UB-Mannheim/tesseract/wiki إضافةً إلى الحزمة pytesseract كما يلي:

pip install pytesseract

الآن اتبع التعليمات التالية:

import cv2
import pytesseract # pip install pytesseract
# حدد المسار الذي قمت فيه بتثبيت الملف
pytesseract.pytesseract.tesseract_cmd = 'tesseract.exe'
# إقرأ الصورة
img = cv2.imread("sample.jpg")
# قم بتحويل الصورة إلى الصيغة الرمادية
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

والآن قم بتطبيق إحدى تقنيات التعتيب وهناك 3 أنواع للتعتيب يمكنك تطبيقها في CV2  : التعتيب البسيط+التعتيب المتكيف+تعتيب أوتسو وسنستخدم تعتيب أوتسو هنا:

ret, thresh1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)

حدد شكل البنية وحجم النواة. حيث أن حجم النواة يزيد أو ينقص مساحة المستطيل المراد اكتشافه. قيمة أصغر مثل (10 ، 10) ستكتشف كل كلمة بدلاً من جملة:

rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (18, 18))

ونطبق عملية تمديد للصورة:

dilation = cv2.dilate(thresh1, rect_kernel, iterations = 1)

اكتشاف الملامح contours:

contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)

إنشاء نسخة من الصورة وملف نصي:

im2 = img.copy()
# إنشاء ملف نصي
file = open("recognized.txt", "w+")
file.write("")
file.close()

نقوم بالتكرار بحلقة على ال contours  ثم يتم اقتصاص الجزء المستطيل وتمريره إلى pytesseract لاستخراج النص منه ثم كتابة النص المستخرج في الملف النصي:

for cnt in contours:
	x, y, w, h = cv2.boundingRect(cnt)	
	# رسم مستطيل على الصورة المنسوخة
	rect = cv2.rectangle(im2, (x, y), (x + w, y + h), (0, 255, 0), 2)	
	# اقتصاص كتلة النص لإعطاء مدخلات إلى التعرف الضوئي على الحروف
	cropped = im2[y:y + h, x:x + w]
	# append فتح الملف ونحدد له وضع التحديث 
	file = open("recognized.txt", "a")
	# OCR تطبيق 
	text = pytesseract.image_to_string(cropped)
	# كتابة النص إلى الملف
	file.write(text)
	file.write("\n")
	# إغلاقه
	# Close the file
	file.close

والملف  الل حيطلع فيه النص مع شكل المستطيل

هل يمكن لحضرتكم التجربة على الصورة

2.jpg

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

فين الرد

ماهى اللغة والمودبل المستعمل فى وورد ميكروسوفت وعدسة جوجل؟

كيف يمكن استخدام pytesseract  و opencv

فى استخراج النص مع الصور المطبوعة الى ملف doc

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...