برنامه نویسی

تشخیص کارآمد گواهینامه رانندگی با OCR API: آموزش گام به گام

Summarize this content to 400 words in Persian Lang

فناوری تشخیص کاراکتر نوری (OCR) روشی را که ما انواع مختلف اسناد را – مانند اسناد کاغذی اسکن شده، PDF یا تصاویر دوربین دیجیتال – به داده‌های قابل ویرایش و جستجو تبدیل می‌کنیم، تبدیل کرده است. OCR برای خودکار کردن ورود داده ها، افزایش دقت و صرفه جویی در زمان با حذف نیاز به استخراج دستی داده ها حیاتی است. کاربردهای آن در صنایعی مانند بانکداری، مراقبت های بهداشتی، لجستیک و خدمات دولتی گسترده است و آن را به ابزاری ضروری در عصر تحول دیجیتال تبدیل می کند.

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

برای این آموزش، ما از API4AI OCR API استفاده خواهیم کرد، یک راه حل قدرتمند و قابل انطباق که به دلیل دقت و عملکرد بالا در وظایف کلی OCR شناخته شده است. API4AI به دلیل کاربر پسند بودن، مستندات گسترده و مقرون به صرفه بودن انتخاب شد. این یک API انعطاف پذیر ارائه می دهد که می تواند در برنامه های مختلف ادغام شود تا OCR را در انواع مختلف اسناد از جمله گواهینامه های رانندگی انجام دهد. با این حال، می توانید از هر ابزار دیگری با استفاده از این راهنما به عنوان مرجع استفاده کنید.

یکی از دلایل اصلی انتخاب یک API عمومی OCR مانند API4AI، به جای راه حل های تخصصی که منحصراً برای شناسایی گواهینامه رانندگی طراحی شده اند، مقرون به صرفه بودن است. راه‌حل‌های تخصصی اغلب با هزینه‌های بالاتر و انعطاف‌پذیری کمتر همراه هستند، که می‌تواند بار قابل توجهی باشد، به‌ویژه برای مشاغل کوچک تا متوسط. با استفاده از یک OCR API عمومی، می توانید با هزینه کمتر به نتایج مشابهی دست یابید و در عین حال انعطاف پذیری برای تطبیق راه حل برای سایر نیازهای OCR را نیز حفظ کنید.

در بخش‌های بعدی، شما را با راه‌اندازی محیط، ادغام API4AI OCR API و نوشتن کدهای لازم برای شناسایی و استخراج اطلاعات از گواهینامه‌های رانندگی راهنمایی می‌کنیم. چه برنامه‌نویسی باشید که به‌دنبال افزودن قابلیت‌های OCR به برنامه‌تان است و چه صاحب کسب‌وکاری که قصد دارد تأیید هویت را به‌طور خودکار انجام دهد، این آموزش گام به گام شما را با دانش و ابزارهایی برای شروع کار مجهز می‌کند.

تعریف تشخیص کاراکتر نوری (OCR)

تشخیص کاراکتر نوری (OCR) یک فناوری طراحی شده برای تبدیل فرمت‌های مختلف اسناد – مانند اسناد کاغذی اسکن شده، PDF یا تصاویر – به داده‌های متنی قابل ویرایش و جستجو است. الگوریتم‌های OCR الگوهای بصری کاراکترها را در این اسناد بررسی می‌کنند و آنها را به متن قابل خواندن ماشین تبدیل می‌کنند و رایانه‌ها را قادر می‌سازند محتوا را درک و پردازش کنند. OCR به ابزاری حیاتی در دیجیتالی کردن اطلاعات، تسهیل اتوماسیون و بهینه سازی گردش کار در صنایع مختلف تبدیل شده است.

کاربردهای رایج فناوری OCR

فناوری OCR در صنایع و سناریوهای مختلفی استفاده می شود، از جمله:

دیجیتالی شدن اسناد: تبدیل اسناد فیزیکی به فرمت های دیجیتال برای ذخیره سازی، بازیابی و توزیع آسان تر.

اتوماسیون ورود اطلاعات: ساده سازی ورود داده ها با استخراج متن از اسناد و وارد کردن آن در پایگاه های داده یا سیستم های دیگر.

تشخیص متن در تصاویر: شناسایی متن در تصاویر گرفته شده توسط دوربین های دیجیتال یا تلفن های هوشمند، مانند علائم، برچسب ها یا یادداشت های دست نویس.

خدمات ترجمه: تسهیل ترجمه متن چاپی یا دست نویس از یک زبان به زبان دیگر.

دسترسی: در دسترس قرار دادن مواد چاپی برای افراد کم بینا با تبدیل آنها به قالب های متن به گفتار یا بریل.

کاربردهای خاص در تشخیص گواهینامه رانندگی

تشخیص گواهینامه رانندگی یک کاربرد تخصصی از فناوری OCR است که شامل استخراج اطلاعات کلیدی از گواهینامه های رانندگی، مانند نام دارنده، شماره گواهینامه، تاریخ تولد و آدرس است. این داده ها اغلب برای تأیید هویت در بخش های مختلف مورد نیاز است، از جمله:

خدمات کرایه اتومبیل: تایید هویت مشتریان قبل از اجاره خودرو برای اطمینان از رعایت محدودیت های سنی و صلاحیت رانندگی.

موسسات مالی: تأیید هویت مشتری برای افتتاح حساب، درخواست وام یا تراکنش های مالی.

سازمان های دولتی: پردازش کارآمد تمدید گواهینامه رانندگی، ثبت نام و سایر وظایف اداری.

امنیت و کنترل دسترسی: ارائه دسترسی به مناطق ممنوعه یا اطلاعات حساس بر اساس هویت های تایید شده.

اهمیت انتخاب API OCR مناسب برای Task

برای کارهایی مانند شناسایی گواهینامه رانندگی و سایر برنامه های OCR، انتخاب OCR API مناسب برای اطمینان از نتایج دقیق و قابل اعتماد ضروری است. ملاحظات کلیدی هنگام انتخاب OCR API عبارتند از:

دقت: قابلیت موتور OCR برای تشخیص دقیق متن، حتی در شرایط چالش برانگیز مانند تصاویر با کیفیت پایین یا متن تحریف شده.

سرعت: سرعت پردازش OCR API که هنگام مدیریت حجم زیادی از اسناد یا برنامه‌های بلادرنگ بسیار مهم است.

سهولت ادغام: سادگی و انعطاف پذیری ترکیب OCR API در برنامه های کاربردی یا گردش کار موجود.

پشتیبانی از زبان: توانایی پشتیبانی از چندین زبان و مجموعه کاراکترها، به ویژه برای برنامه های کاربردی در محیط های چند زبانه.

هزینه: ساختار قیمت‌گذاری OCR API، از جمله هزینه‌های مبتنی بر استفاده یا طرح‌های اشتراک، و مقرون به صرفه بودن آن برای هدف مورد نظر.

با ارزیابی کامل این عوامل و انتخاب یک OCR API قابل اعتماد مانند API4AI، می توانید از موفقیت پروژه شناسایی گواهینامه رانندگی خود اطمینان حاصل کنید، کارایی، دقت و مقرون به صرفه بودن را افزایش دهید.

مروری بر راهکارهای تخصصی برای تشخیص گواهینامه رانندگی

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

بررسی هزینه های بالای راه حل های تخصصی

در حالی که راه حل های تخصصی راحتی و دقت بالایی را ارائه می دهند، اما دارای معایب قابل توجهی هستند، به ویژه از نظر هزینه. این راه حل ها اغلب شامل موارد زیر است:

هزینه های بالای صدور مجوز: نرم افزارهای تخصصی معمولاً با هزینه های گزافی برای صدور مجوز یا هزینه های اشتراک ارائه می شوند که می تواند برای مشاغل کوچک تا متوسط ​​بسیار گران باشد.

هزینه های هر معامله: بسیاری از راه حل های تخصصی بر اساس تعداد تراکنش ها یا اسکن ها شارژ می شوند و با افزایش حجم مجوزهای پردازش شده، هزینه ها افزایش می یابد.

هزینه های نگهداری و پشتیبانی: هزینه‌های مداوم برای نگهداری، به‌روزرسانی و پشتیبانی نرم‌افزار می‌تواند انباشته شود و هزینه کل مالکیت را بیشتر افزایش دهد.

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

مزایای استفاده از APIهای OCR عمومی برای شناسایی گواهینامه رانندگی

انتخاب یک OCR API عمومی، مانند API4AI، برای تشخیص گواهینامه رانندگی، در مقایسه با راه حل های تخصصی، مزایای متعددی را ارائه می دهد:

مقرون به صرفه بودن: APIهای OCR عمومی معمولاً دارای هزینه‌های اولیه پایین‌تر و مدل‌های قیمت‌گذاری سازگارتر، از جمله گزینه‌های پرداختی هستند. این باعث می‌شود که آن‌ها از نظر بودجه مناسب‌تر باشند، به‌ویژه برای مشاغلی که حجم پردازش آنها در نوسان است.

انعطاف پذیری و سفارشی سازی: API های OCR عمومی امکان انطباق و سفارشی سازی قابل توجه فرآیند OCR را برای برآوردن نیازهای خاص فراهم می کنند. توسعه دهندگان می توانند فرآیند استخراج داده ها را به خوبی تنظیم کنند، قوانین اعتبار سنجی سفارشی را پیاده سازی کنند و با سیستم های دیگر ادغام شوند بدون اینکه محدودیت های یک راه حل تخصصی محدود شوند.

مقیاس پذیری: API های OCR عمومی برای رسیدگی به طیف متنوعی از انواع اسناد ساخته شده اند و می توانند به راحتی با رشد یک تجارت مقیاس شوند. با افزایش حجم مجوزهای پردازش شده، راه حل را می توان بدون تغییرات عمده در زیرساخت های اساسی گسترش داد.

با استفاده از قابلیت‌های OCR APIهای عمومی، این سازمان‌ها کاهش قابل توجهی در هزینه‌ها، افزایش کارایی، و توانایی تنظیم راه‌حل‌های خود را با تغییر نیازمندی‌هایشان حفظ کردند. این امر بر اثربخشی راه‌حل‌های کلی OCR در کاربردهای عملی، پشتیبانی از استفاده از آنها برای وظایف تشخیص گواهینامه رانندگی تأکید می‌کند.

مفروضات

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

برای این نمایش، از نقطه پایانی API آزمایشی ارائه شده توسط API4AI استفاده خواهیم کرد که تعداد محدودی درخواست را امکان پذیر می کند. این برای اهداف آزمایشی ما کافی خواهد بود و ما را قادر می سازد قابلیت های OCR API را بدون متحمل شدن هیچ هزینه ای به نمایش بگذاریم. برای راه‌حلی با ویژگی‌های کامل در محیط تولید، لطفاً برای دستورالعمل‌های دقیق در مورد دریافت کلید API و کاوش در طیف کامل ویژگی‌های موجود، به مستندات API4AI مراجعه کنید.

برای تست و توسعه از تصویر زیر استفاده می کنیم.

آشنایی با API4AI OCR API

API4AI OCR API در دو حالت کار می کند: “متن_ساده” *(پیش فرض) و *”کلمات ساده”. حالت “simple_text” متنی را با عبارات شناخته شده ایجاد می کند که با شکست خط و موقعیت آنها از هم جدا شده اند. این حالت در حال حاضر تمرکز ما نیست زیرا باید مکان هر کلمه را تعیین کنیم تا یک بازگشت قابل اعتماد داشته باشیم. قبل از غواصی، درک نحوه عملکرد API ضروری است. همانطور که گفته می شود، یک مثال رمزی بیش از هزار کلمه ارزش دارد.

import math
import sys

import cv2
import requests

API_URL = ‘https://demo.api4ai.cloud/ocr/v1/results?algo=simple-words’

# get path from the 1st argument
image_path = sys.argv[1]

# we us HTTP API to get recognized words from the specified image
with open(image_path, ‘rb’) as f:
response = requests.post(API_URL, files={‘image’: f})
json_obj = response.json()

for elem in json_obj[‘results’][0][‘entities’][0][‘objects’]:
box = elem[‘box’] # normalized x, y, width, height
text = elem[‘entities’][0][‘text’] # recognized text
print( # show every word with bounding box
f'[{box[0]:.4f}, {box[1]:.4f}, {box[2]:.4f}, {box[3]:.4f}], {text}’
)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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


[0.6279, 0.6925, 0.0206, 0.0200], All
[0.6529, 0.6800, 0.1118, 0.0300], 02/21/1984
[0.6162, 0.7175, 0.0309, 0.0200], BEURT
[0.6515, 0.7350, 0.0441, 0.0175], 4a.ISS
[0.6515, 0.7675, 0.1132, 0.0250], 02/17/2010
[0.7662, 0.1725, 0.0647, 0.1125], tomand
[0.6529, 0.8550, 0.0324, 0.0275], ♥♥
[0.6941, 0.8550, 0.0809, 0.0275], DONOR
[0.6529, 0.8950, 0.1074, 0.0300], VETERAN
[0.9000, 0.0125, 0.0691, 0.0375], USA

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید از داده های استخراج شده برای ترسیم کادرهای محدود کننده روی یک تصویر با OpenCV استفاده کنیم. برای انجام این کار، باید مقادیر نرمال شده را به مقادیر مطلق نشان داده شده در پیکسل های عدد صحیح تبدیل کنیم. ما به مختصات دقیق گوشه سمت چپ بالا و پایین سمت راست نیاز داریم تا کادر مرزی را به طور دقیق ترسیم کنیم. برای انجام این کار، اجازه دهید یک تابع به نام ایجاد کنیم get_corner_coords.

def get_corner_coords(height, width, box):
x1 = int(box[0] * width)
y1 = int(box[1] * height)
obj_width = box[2] * width
obj_height = box[3] * height
x2 = int(x1 + obj_width)
y2 = int(y1 + obj_height)
return x1, y1, x2, y2

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تابع رسم کادر محدود کننده ساده خواهد بود:

def draw_bounding_box(image, box):
x1, y1, x2, y2 = get_corner_coords(image.shape[0], image.shape[1], box)
cv2.rectangle(image, (x1 – 2, y1 – 2), (x2 + 2, y2 + 2), (127, 0, 0), 2)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این ویژگی، اندازه فریم را کمی دو پیکسل افزایش دادیم تا اطمینان حاصل کنیم که خیلی به کلمات نزدیک نیست. رنگ (127، 0، 0) نشان دهنده آبی سرمه ای در است BGR فرمت و ضخامت قاب روی دو پیکسل تنظیم شده است.

طبیعتاً برای دستکاری یک تصویر، ابتدا باید آن را خواند. بیایید قسمت پایانی اسکریپت خود را به روز کنیم: تصویر را بخوانید، خروجی اشکال زدایی حاوی اطلاعات فریم را حذف کنید، هر کادر محدود را روی تصویر خوانده شده بکشید، و تصویر اصلاح شده را ذخیره کنید. “output.png”.

image = cv2.imread(image_path)
for elem in json_obj[‘results’][0][‘entities’][0][‘objects’]:
box = elem[‘box’] # normalized x, y, width, height
text = elem[‘entities’][0][‘text’] # recognized text
draw_bounding_box(image, box) # add boundaries to image
cv2.imwrite(‘output.png’, image)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و الان چی داریم:

استخراج شناسه و نام دارنده مجوز

قبلاً با موفقیت از API برای استخراج اطلاعات متنی از تصویر گواهینامه رانندگی استفاده می کردیم. این یک شروع عالی است! اما چگونه به طور خاص شماره شناسه و نام را بازیابی کنیم؟

در اینجا عناصر موجود در حوزه مورد علاقه آمده است:

[0.3059, 0.1975, 0.0500, 0.0175], 4d.DLN
[0.3059, 0.2325, 0.1059, 0.0275], A9999999
[0.3074, 0.2800, 0.0603, 0.0200], 1.FAMILY
[0.3735, 0.2800, 0.0412, 0.0175], NAME
[0.3059, 0.3150, 0.0794, 0.0300], JONES
[0.3059, 0.3675, 0.0574, 0.0225], 2.GIVEN
[0.3691, 0.3675, 0.0529, 0.0225], NAMES
[0.3074, 0.4025, 0.1191, 0.0275], ANGELINA
[0.3074, 0.4375, 0.1191, 0.0300], GABRIELA

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگرچه درخواست POST نتایج سفارش داده شده را برگرداند، اما ممکن است سفارش متفاوت باشد، بنابراین نمی توانیم به آن وابسته باشیم. ایمن تر است که فرض کنیم نتایج عناصر شناسایی شده را به صورت تصادفی ذخیره می کنند.

بیایید یک لیست به نام ایجاد کنیم کلمات برای جستجوی آسان کلمات و موقعیت آنها:

words = [] for elem in json_obj[‘results’][0][‘entities’][0][‘objects’]:
box = elem[‘box’] text = elem[‘entities’][0][‘text’] words.append({‘box’: box, ‘text’: text})

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مراجعه کنیم به “4d.DLN”””1.خانواده”، و “2. داده شده” به عنوان نام فیلدها، و متن زیر آنها در تصویر به عنوان مقادیر فیلد. ساده ترین روش جستجو برای نزدیکترین عناصر واقع در زیر نام فیلدها است. ممکن است با کلماتی در سمت راست یا چپ روبرو شویم، بنابراین باید ارزیابی کنیم. فاصله بین عناصر متن به جای موقعیت آنها نسبت به محورها، اجازه دهید برای این کار مقداری کد بنویسیم.

ابتدا، بیایید موقعیت نام فیلدها را شناسایی کنیم:

ID_MARK = ‘4d.DLN’
FAMILY_MARK = ‘1.FAMILY’
NAME_MARK = ‘2.GIVEN’

id_mark_info = {}
fam_mark_info = {}
name_mark_info = {}

for elem in words:
if elem[‘text’] == ID_MARK:
id_mark_info = elem
elif elem[‘text’] == FAMILY_MARK:
fam_mark_info = elem
elif elem[‘text’] == NAME_MARK:
name_mark_info = elem

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مرحله بعد، ما تابعی را می نویسیم تا نزدیک ترین عناصر را که در زیر یک عنصر مرجع قرار گرفته اند، پیدا کنیم:

def find_label_below(word_info):
x = word_info[‘box’][0] y = word_info[‘box’][1] candidate = words[0] candidate_dist = math.inf
for elem in words:
if elem[‘text’] == word_info[‘text’]:
continue
curr_box_x = elem[‘box’][0] curr_box_y = elem[‘box’][1] curr_vert_dist = curr_box_y – y
curr_horiz_dist = x – curr_box_x
if curr_vert_dist > 0: # we are only looking for items below
dist = math.hypot(curr_vert_dist, curr_horiz_dist)
if dist > candidate_dist:
continue
candidate_dist = dist
candidate = elem
return candidate

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید این تابع را اعمال کنیم و مرزهای اطراف عناصر شناسایی شده را ترسیم کنیم:

id_info = find_label_below(id_mark_info)
fam_info = find_label_below(fam_mark_info)
name_info = find_label_below(name_mark_info)
name2_info = find_label_below(name_info)
canvas = image.copy()
draw_bounding_box(canvas, id_info[‘box’])
draw_bounding_box(canvas, fam_info[‘box’])
draw_bounding_box(canvas, name_info[‘box’])
draw_bounding_box(canvas, name2_info[‘box’])
cv2.imwrite(‘result.png’, canvas)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید آنچه را که تاکنون به دست آورده ایم مرور کنیم:

به نظر می رسد که ما با موفقیت فیلدهای لازم را استخراج کرده ایم! 😊

نهایی کردن نتایج

با توجه به تمام مواردی که پوشش دادیم، بیایید یک برنامه عملی ایجاد کنیم که به OpenCV متکی نباشد. این برنامه مسیر تصویر را به عنوان آرگومان می پذیرد و شماره شناسه و نام کامل را در ترمینال نمایش می دهد.

#!/usr/bin/env python3

import math
import sys

import requests

API_URL = ‘https://demo.api4ai.cloud/ocr/v1/results?algo=simple-words’

ID_MARK = ‘4d.DLN’
FAMILY_MARK = ‘1.FAMILY’
NAME_MARK = ‘2.GIVEN’
ADDRESS_MARK = ‘8.ADDRESS’

def find_text_below(words, word_info):
x = word_info[‘box’][0] y = word_info[‘box’][1] candidate = words[0] candidate_dist = math.inf
for elem in words:
if elem[‘text’] == word_info[‘text’]:
continue
curr_box_x = elem[‘box’][0] curr_box_y = elem[‘box’][1] curr_vert_dist = curr_box_y – y
curr_horiz_dist = x – curr_box_x
if curr_vert_dist > 0: # we are only looking for items below
dist = math.hypot(curr_vert_dist, curr_horiz_dist)
if dist > candidate_dist:
continue
candidate_dist = dist
candidate = elem
return candidate

if __name__ == ‘__main__’:
if len(sys.argv) != 2:
print(‘Expected one argument: path to image.’)
sys.exit(1)
image_path = sys.argv[1] with open(image_path, ‘rb’) as f:
response = requests.post(API_URL, files={‘image’: f})
json_obj = response.json()
words = [] for elem in json_obj[‘results’][0][‘entities’][0][‘objects’]:
box = elem[‘box’] text = elem[‘entities’][0][‘text’] words.append({‘box’: box, ‘text’: text})

id_mark_info = {}
fam_mark_info = {}
name_mark_info = {}

for elem in words:
if elem[‘text’] == ID_MARK:
id_mark_info = elem
elif elem[‘text’] == FAMILY_MARK:
fam_mark_info = elem
elif elem[‘text’] == NAME_MARK:
name_mark_info = elem

license = find_text_below(words, id_mark_info)[‘text’] family_name = find_text_below(words, fam_mark_info)[‘text’] name1_info = find_text_below(words, name_mark_info)
name1 = name1_info[‘text’] name2 = find_text_below(words, name1_info)[‘text’]

if name2 == ADDRESS_MARK: # no second name
full_name = f'{name1} {family_name}’
else: # with second name
full_name = f'{name1} {name2} {family_name}’

print(f’Driver license: {license}’)
print(f’Full name: {full_name}’)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی برنامه برای تصویر ارائه شده در ابتدا، به عنوان آرگومان اول:

License: A9999999
Full name: ANGELINA GABRIELA JONES

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این برنامه را می توان به راحتی برای استخراج اطلاعات اضافی از گواهینامه های رانندگی تغییر داد. در حالی که ما به همه مشکلات احتمالی اشاره نکردیم، زیرا هدف اصلی نشان دادن کاربرد عملی API بود، فضای زیادی برای خواننده وجود دارد تا بهبودها را انجام دهد. به عنوان مثال، برای مدیریت تصاویر چرخانده شده، می توانید زاویه چرخش را از فیلدهای کلیدی محاسبه کنید و از آن اطلاعات برای مکان یابی عناصر “زیر” با مقادیر فیلد استفاده کنید. آن را امتحان کنید! با استفاده از این مفاهیم کلی، می توانید منطق را برای انواع دیگر اسناد و تصاویر حاوی متن پیاده سازی کنید.

برای کسب اطلاعات بیشتر، به مستندات OCR API مراجعه کنید و نمونه های کد نوشته شده در زبان های برنامه نویسی مختلف را بررسی کنید.

در این آموزش، شما را از طریق فرآیند گام به گام استفاده از آن راهنمایی کرده ایم [API4AI OCR API](https://api4.ai/apis/ocr برای شناسایی و استخراج اطلاعات از گواهینامه رانندگی ایالات متحده. ما با درک اصول اولیه فناوری OCR و کاربردهای متنوع آن شروع کردیم. سپس مزایای استفاده از یک OCR API عمومی نسبت به تخصصی را مورد بحث قرار دادیم. راه حل ها، با تاکید بر مقرون به صرفه بودن، انعطاف پذیری و مقیاس پذیری.

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

استفاده از OCR برای تشخیص گواهینامه رانندگی مزایای بی شماری را به همراه دارد. استخراج داده ها را خودکار می کند، تلاش دستی را کاهش می دهد و خطاها را به حداقل می رساند، که می تواند به طور قابل توجهی کارایی عملیاتی را در صنایعی مانند اجاره خودرو، موسسات مالی و سازمان های دولتی افزایش دهد. علاوه بر این، سازگاری API های OCR عمومی امکان سفارشی سازی و کاربرد در انواع مختلف اسناد و موارد استفاده را فراهم می کند.

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

از اینکه این آموزش را دنبال کردید متشکرم. امیدواریم برای شما مفید و مفید بوده باشد. برای جزئیات بیشتر و استفاده پیشرفته، حتماً اسناد OCR API را بررسی کنید و نمونه‌های اضافی را در زبان‌های برنامه‌نویسی مختلف بررسی کنید. کد نویسی مبارک!

پیوندهای اسناد API4AI OCR API

برای بررسی ویژگی‌ها و قابلیت‌های API4AI OCR API با جزئیات بیشتر، به مستندات رسمی مراجعه کنید. این راهنماهای جامع، مثال‌های کد و توضیحات مفصل در مورد نقاط پایانی API ارائه می‌کند و به شما کمک می‌کند تا از OCR در برنامه‌های خود بهترین استفاده را ببرید.

مطالعه بیشتر در مورد فناوری OCR و پردازش تصویر

برای کسانی که به دنبال تعمیق درک خود از فناوری OCR و پردازش تصویر هستند، در اینجا منابع ارزشمندی وجود دارد:

کتاب ها:

“پردازش تصویر دیجیتال” توسط رافائل سی. گونزالس و ریچارد ای. وودز
“تسلط بر OpenCV 4 با پایتون” اثر آلبرتو فرناندز ویلان
“یادگیری عمیق برای بینایی کامپیوتری” نوشته راجالینگپاا شانموگامانی

مقالات و مقالات:

وب سایت ها:

Towards Data Science – پلتفرمی با مقالات متعدد در مورد یادگیری ماشینی، یادگیری عمیق و پردازش تصویر.

OpenCV – سایت رسمی برای OpenCV، شامل آموزش ها و مستندات.

پیوند به دوره ها و آموزش های مرتبط

مهارت های عملی خود را تقویت کنید و تجربه عملی را با این آموزش ها و دوره های متمرکز بر OCR و پردازش تصویر به دست آورید:

آموزش ها:

دوره های آنلاین:

با کاوش در این منابع تکمیلی، می توانید دانش خود را در مورد فناوری OCR گسترش دهید، مهارت های خود را تقویت کنید و روش های نوآورانه ای را برای اعمال OCR در پروژه های خود کشف کنید. از سفر یادگیری خود لذت ببرید!

اطلاعات بیشتر در مورد وب، ابر، هوش مصنوعی و API برای پردازش تصویر

فناوری تشخیص کاراکتر نوری (OCR) روشی را که ما انواع مختلف اسناد را – مانند اسناد کاغذی اسکن شده، PDF یا تصاویر دوربین دیجیتال – به داده‌های قابل ویرایش و جستجو تبدیل می‌کنیم، تبدیل کرده است. OCR برای خودکار کردن ورود داده ها، افزایش دقت و صرفه جویی در زمان با حذف نیاز به استخراج دستی داده ها حیاتی است. کاربردهای آن در صنایعی مانند بانکداری، مراقبت های بهداشتی، لجستیک و خدمات دولتی گسترده است و آن را به ابزاری ضروری در عصر تحول دیجیتال تبدیل می کند.

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

برای این آموزش، ما از API4AI OCR API استفاده خواهیم کرد، یک راه حل قدرتمند و قابل انطباق که به دلیل دقت و عملکرد بالا در وظایف کلی OCR شناخته شده است. API4AI به دلیل کاربر پسند بودن، مستندات گسترده و مقرون به صرفه بودن انتخاب شد. این یک API انعطاف پذیر ارائه می دهد که می تواند در برنامه های مختلف ادغام شود تا OCR را در انواع مختلف اسناد از جمله گواهینامه های رانندگی انجام دهد. با این حال، می توانید از هر ابزار دیگری با استفاده از این راهنما به عنوان مرجع استفاده کنید.

یکی از دلایل اصلی انتخاب یک API عمومی OCR مانند API4AI، به جای راه حل های تخصصی که منحصراً برای شناسایی گواهینامه رانندگی طراحی شده اند، مقرون به صرفه بودن است. راه‌حل‌های تخصصی اغلب با هزینه‌های بالاتر و انعطاف‌پذیری کمتر همراه هستند، که می‌تواند بار قابل توجهی باشد، به‌ویژه برای مشاغل کوچک تا متوسط. با استفاده از یک OCR API عمومی، می توانید با هزینه کمتر به نتایج مشابهی دست یابید و در عین حال انعطاف پذیری برای تطبیق راه حل برای سایر نیازهای OCR را نیز حفظ کنید.

در بخش‌های بعدی، شما را با راه‌اندازی محیط، ادغام API4AI OCR API و نوشتن کدهای لازم برای شناسایی و استخراج اطلاعات از گواهینامه‌های رانندگی راهنمایی می‌کنیم. چه برنامه‌نویسی باشید که به‌دنبال افزودن قابلیت‌های OCR به برنامه‌تان است و چه صاحب کسب‌وکاری که قصد دارد تأیید هویت را به‌طور خودکار انجام دهد، این آموزش گام به گام شما را با دانش و ابزارهایی برای شروع کار مجهز می‌کند.

تعریف تشخیص کاراکتر نوری (OCR)

تشخیص کاراکتر نوری (OCR) یک فناوری طراحی شده برای تبدیل فرمت‌های مختلف اسناد – مانند اسناد کاغذی اسکن شده، PDF یا تصاویر – به داده‌های متنی قابل ویرایش و جستجو است. الگوریتم‌های OCR الگوهای بصری کاراکترها را در این اسناد بررسی می‌کنند و آنها را به متن قابل خواندن ماشین تبدیل می‌کنند و رایانه‌ها را قادر می‌سازند محتوا را درک و پردازش کنند. OCR به ابزاری حیاتی در دیجیتالی کردن اطلاعات، تسهیل اتوماسیون و بهینه سازی گردش کار در صنایع مختلف تبدیل شده است.

کاربردهای رایج فناوری OCR

فناوری OCR در صنایع و سناریوهای مختلفی استفاده می شود، از جمله:

  • دیجیتالی شدن اسناد: تبدیل اسناد فیزیکی به فرمت های دیجیتال برای ذخیره سازی، بازیابی و توزیع آسان تر.
  • اتوماسیون ورود اطلاعات: ساده سازی ورود داده ها با استخراج متن از اسناد و وارد کردن آن در پایگاه های داده یا سیستم های دیگر.
  • تشخیص متن در تصاویر: شناسایی متن در تصاویر گرفته شده توسط دوربین های دیجیتال یا تلفن های هوشمند، مانند علائم، برچسب ها یا یادداشت های دست نویس.
  • خدمات ترجمه: تسهیل ترجمه متن چاپی یا دست نویس از یک زبان به زبان دیگر.
  • دسترسی: در دسترس قرار دادن مواد چاپی برای افراد کم بینا با تبدیل آنها به قالب های متن به گفتار یا بریل.

کاربردهای خاص در تشخیص گواهینامه رانندگی

تشخیص گواهینامه رانندگی یک کاربرد تخصصی از فناوری OCR است که شامل استخراج اطلاعات کلیدی از گواهینامه های رانندگی، مانند نام دارنده، شماره گواهینامه، تاریخ تولد و آدرس است. این داده ها اغلب برای تأیید هویت در بخش های مختلف مورد نیاز است، از جمله:

  • خدمات کرایه اتومبیل: تایید هویت مشتریان قبل از اجاره خودرو برای اطمینان از رعایت محدودیت های سنی و صلاحیت رانندگی.
  • موسسات مالی: تأیید هویت مشتری برای افتتاح حساب، درخواست وام یا تراکنش های مالی.
  • سازمان های دولتی: پردازش کارآمد تمدید گواهینامه رانندگی، ثبت نام و سایر وظایف اداری.
  • امنیت و کنترل دسترسی: ارائه دسترسی به مناطق ممنوعه یا اطلاعات حساس بر اساس هویت های تایید شده.

اهمیت انتخاب API OCR مناسب برای Task

برای کارهایی مانند شناسایی گواهینامه رانندگی و سایر برنامه های OCR، انتخاب OCR API مناسب برای اطمینان از نتایج دقیق و قابل اعتماد ضروری است. ملاحظات کلیدی هنگام انتخاب OCR API عبارتند از:

  • دقت: قابلیت موتور OCR برای تشخیص دقیق متن، حتی در شرایط چالش برانگیز مانند تصاویر با کیفیت پایین یا متن تحریف شده.
  • سرعت: سرعت پردازش OCR API که هنگام مدیریت حجم زیادی از اسناد یا برنامه‌های بلادرنگ بسیار مهم است.
  • سهولت ادغام: سادگی و انعطاف پذیری ترکیب OCR API در برنامه های کاربردی یا گردش کار موجود.
  • پشتیبانی از زبان: توانایی پشتیبانی از چندین زبان و مجموعه کاراکترها، به ویژه برای برنامه های کاربردی در محیط های چند زبانه.
  • هزینه: ساختار قیمت‌گذاری OCR API، از جمله هزینه‌های مبتنی بر استفاده یا طرح‌های اشتراک، و مقرون به صرفه بودن آن برای هدف مورد نظر.

با ارزیابی کامل این عوامل و انتخاب یک OCR API قابل اعتماد مانند API4AI، می توانید از موفقیت پروژه شناسایی گواهینامه رانندگی خود اطمینان حاصل کنید، کارایی، دقت و مقرون به صرفه بودن را افزایش دهید.

مروری بر راهکارهای تخصصی برای تشخیص گواهینامه رانندگی

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

بررسی هزینه های بالای راه حل های تخصصی

در حالی که راه حل های تخصصی راحتی و دقت بالایی را ارائه می دهند، اما دارای معایب قابل توجهی هستند، به ویژه از نظر هزینه. این راه حل ها اغلب شامل موارد زیر است:

  • هزینه های بالای صدور مجوز: نرم افزارهای تخصصی معمولاً با هزینه های گزافی برای صدور مجوز یا هزینه های اشتراک ارائه می شوند که می تواند برای مشاغل کوچک تا متوسط ​​بسیار گران باشد.
  • هزینه های هر معامله: بسیاری از راه حل های تخصصی بر اساس تعداد تراکنش ها یا اسکن ها شارژ می شوند و با افزایش حجم مجوزهای پردازش شده، هزینه ها افزایش می یابد.
  • هزینه های نگهداری و پشتیبانی: هزینه‌های مداوم برای نگهداری، به‌روزرسانی و پشتیبانی نرم‌افزار می‌تواند انباشته شود و هزینه کل مالکیت را بیشتر افزایش دهد.
  • قفل فروشنده: کسب‌وکارها ممکن است به یک فروشنده وابسته شوند و انعطاف‌پذیری آن‌ها را برای تغییر به راه‌حل‌های جایگزین بدون تحمیل هزینه‌های اضافی یا تجربه اختلالات قابل توجه محدود کند.

مزایای استفاده از APIهای OCR عمومی برای شناسایی گواهینامه رانندگی

انتخاب یک OCR API عمومی، مانند API4AI، برای تشخیص گواهینامه رانندگی، در مقایسه با راه حل های تخصصی، مزایای متعددی را ارائه می دهد:

  • مقرون به صرفه بودن: APIهای OCR عمومی معمولاً دارای هزینه‌های اولیه پایین‌تر و مدل‌های قیمت‌گذاری سازگارتر، از جمله گزینه‌های پرداختی هستند. این باعث می‌شود که آن‌ها از نظر بودجه مناسب‌تر باشند، به‌ویژه برای مشاغلی که حجم پردازش آنها در نوسان است.
  • انعطاف پذیری و سفارشی سازی: API های OCR عمومی امکان انطباق و سفارشی سازی قابل توجه فرآیند OCR را برای برآوردن نیازهای خاص فراهم می کنند. توسعه دهندگان می توانند فرآیند استخراج داده ها را به خوبی تنظیم کنند، قوانین اعتبار سنجی سفارشی را پیاده سازی کنند و با سیستم های دیگر ادغام شوند بدون اینکه محدودیت های یک راه حل تخصصی محدود شوند.
  • مقیاس پذیری: API های OCR عمومی برای رسیدگی به طیف متنوعی از انواع اسناد ساخته شده اند و می توانند به راحتی با رشد یک تجارت مقیاس شوند. با افزایش حجم مجوزهای پردازش شده، راه حل را می توان بدون تغییرات عمده در زیرساخت های اساسی گسترش داد.

با استفاده از قابلیت‌های OCR APIهای عمومی، این سازمان‌ها کاهش قابل توجهی در هزینه‌ها، افزایش کارایی، و توانایی تنظیم راه‌حل‌های خود را با تغییر نیازمندی‌هایشان حفظ کردند. این امر بر اثربخشی راه‌حل‌های کلی OCR در کاربردهای عملی، پشتیبانی از استفاده از آنها برای وظایف تشخیص گواهینامه رانندگی تأکید می‌کند.

مفروضات

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

برای این نمایش، از نقطه پایانی API آزمایشی ارائه شده توسط API4AI استفاده خواهیم کرد که تعداد محدودی درخواست را امکان پذیر می کند. این برای اهداف آزمایشی ما کافی خواهد بود و ما را قادر می سازد قابلیت های OCR API را بدون متحمل شدن هیچ هزینه ای به نمایش بگذاریم. برای راه‌حلی با ویژگی‌های کامل در محیط تولید، لطفاً برای دستورالعمل‌های دقیق در مورد دریافت کلید API و کاوش در طیف کامل ویژگی‌های موجود، به مستندات API4AI مراجعه کنید.

برای تست و توسعه از تصویر زیر استفاده می کنیم.

توضیحات تصویر

آشنایی با API4AI OCR API

API4AI OCR API در دو حالت کار می کند: “متن_ساده” *(پیش فرض) و *“کلمات ساده”. حالت “simple_text” متنی را با عبارات شناخته شده ایجاد می کند که با شکست خط و موقعیت آنها از هم جدا شده اند. این حالت در حال حاضر تمرکز ما نیست زیرا باید مکان هر کلمه را تعیین کنیم تا یک بازگشت قابل اعتماد داشته باشیم. قبل از غواصی، درک نحوه عملکرد API ضروری است. همانطور که گفته می شود، یک مثال رمزی بیش از هزار کلمه ارزش دارد.

import math
import sys

import cv2
import requests

API_URL = 'https://demo.api4ai.cloud/ocr/v1/results?algo=simple-words'


# get path from the 1st argument
image_path = sys.argv[1]

# we us HTTP API to get recognized words from the specified image
with open(image_path, 'rb') as f:
    response = requests.post(API_URL, files={'image': f})
json_obj = response.json()

for elem in json_obj['results'][0]['entities'][0]['objects']:
    box = elem['box']  # normalized x, y, width, height
    text = elem['entities'][0]['text']  # recognized text
    print(  # show every word with bounding box
        f'[{box[0]:.4f}, {box[1]:.4f}, {box[2]:.4f}, {box[3]:.4f}], {text}'
    )
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

...
[0.6279, 0.6925, 0.0206, 0.0200], All
[0.6529, 0.6800, 0.1118, 0.0300], 02/21/1984
[0.6162, 0.7175, 0.0309, 0.0200], BEURT
[0.6515, 0.7350, 0.0441, 0.0175], 4a.ISS
[0.6515, 0.7675, 0.1132, 0.0250], 02/17/2010
[0.7662, 0.1725, 0.0647, 0.1125], tomand
[0.6529, 0.8550, 0.0324, 0.0275], ♥♥
[0.6941, 0.8550, 0.0809, 0.0275], DONOR
[0.6529, 0.8950, 0.1074, 0.0300], VETERAN
[0.9000, 0.0125, 0.0691, 0.0375], USA
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید از داده های استخراج شده برای ترسیم کادرهای محدود کننده روی یک تصویر با OpenCV استفاده کنیم. برای انجام این کار، باید مقادیر نرمال شده را به مقادیر مطلق نشان داده شده در پیکسل های عدد صحیح تبدیل کنیم. ما به مختصات دقیق گوشه سمت چپ بالا و پایین سمت راست نیاز داریم تا کادر مرزی را به طور دقیق ترسیم کنیم. برای انجام این کار، اجازه دهید یک تابع به نام ایجاد کنیم get_corner_coords.

def get_corner_coords(height, width, box):
    x1 = int(box[0] * width)
    y1 = int(box[1] * height)
    obj_width = box[2] * width
    obj_height = box[3] * height
    x2 = int(x1 + obj_width)
    y2 = int(y1 + obj_height)
    return x1, y1, x2, y2
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تابع رسم کادر محدود کننده ساده خواهد بود:

def draw_bounding_box(image, box):
    x1, y1, x2, y2 = get_corner_coords(image.shape[0], image.shape[1], box)
    cv2.rectangle(image, (x1 - 2, y1 - 2), (x2 + 2, y2 + 2), (127, 0, 0), 2)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این ویژگی، اندازه فریم را کمی دو پیکسل افزایش دادیم تا اطمینان حاصل کنیم که خیلی به کلمات نزدیک نیست. رنگ (127، 0، 0) نشان دهنده آبی سرمه ای در است BGR فرمت و ضخامت قاب روی دو پیکسل تنظیم شده است.

طبیعتاً برای دستکاری یک تصویر، ابتدا باید آن را خواند. بیایید قسمت پایانی اسکریپت خود را به روز کنیم: تصویر را بخوانید، خروجی اشکال زدایی حاوی اطلاعات فریم را حذف کنید، هر کادر محدود را روی تصویر خوانده شده بکشید، و تصویر اصلاح شده را ذخیره کنید. “output.png”.

image = cv2.imread(image_path)
for elem in json_obj['results'][0]['entities'][0]['objects']:
    box = elem['box']  # normalized x, y, width, height
    text = elem['entities'][0]['text']  # recognized text
    draw_bounding_box(image, box)  # add boundaries to image
cv2.imwrite('output.png', image)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و الان چی داریم:

توضیحات تصویر

استخراج شناسه و نام دارنده مجوز

قبلاً با موفقیت از API برای استخراج اطلاعات متنی از تصویر گواهینامه رانندگی استفاده می کردیم. این یک شروع عالی است! اما چگونه به طور خاص شماره شناسه و نام را بازیابی کنیم؟

در اینجا عناصر موجود در حوزه مورد علاقه آمده است:

[0.3059, 0.1975, 0.0500, 0.0175], 4d.DLN
[0.3059, 0.2325, 0.1059, 0.0275], A9999999
[0.3074, 0.2800, 0.0603, 0.0200], 1.FAMILY
[0.3735, 0.2800, 0.0412, 0.0175], NAME
[0.3059, 0.3150, 0.0794, 0.0300], JONES
[0.3059, 0.3675, 0.0574, 0.0225], 2.GIVEN
[0.3691, 0.3675, 0.0529, 0.0225], NAMES
[0.3074, 0.4025, 0.1191, 0.0275], ANGELINA
[0.3074, 0.4375, 0.1191, 0.0300], GABRIELA

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگرچه درخواست POST نتایج سفارش داده شده را برگرداند، اما ممکن است سفارش متفاوت باشد، بنابراین نمی توانیم به آن وابسته باشیم. ایمن تر است که فرض کنیم نتایج عناصر شناسایی شده را به صورت تصادفی ذخیره می کنند.

بیایید یک لیست به نام ایجاد کنیم کلمات برای جستجوی آسان کلمات و موقعیت آنها:

words = []
for elem in json_obj['results'][0]['entities'][0]['objects']:
    box = elem['box']
    text = elem['entities'][0]['text']
    words.append({'box': box, 'text': text})
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مراجعه کنیم به “4d.DLN“””1.خانواده“، و “2. داده شده” به عنوان نام فیلدها، و متن زیر آنها در تصویر به عنوان مقادیر فیلد. ساده ترین روش جستجو برای نزدیکترین عناصر واقع در زیر نام فیلدها است. ممکن است با کلماتی در سمت راست یا چپ روبرو شویم، بنابراین باید ارزیابی کنیم. فاصله بین عناصر متن به جای موقعیت آنها نسبت به محورها، اجازه دهید برای این کار مقداری کد بنویسیم.

ابتدا، بیایید موقعیت نام فیلدها را شناسایی کنیم:

ID_MARK = '4d.DLN'
FAMILY_MARK = '1.FAMILY'
NAME_MARK = '2.GIVEN'

id_mark_info = {}
fam_mark_info = {}
name_mark_info = {}

for elem in words:
    if elem['text'] == ID_MARK:
        id_mark_info = elem
    elif elem['text'] == FAMILY_MARK:
        fam_mark_info = elem
    elif elem['text'] == NAME_MARK:
        name_mark_info = elem
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مرحله بعد، ما تابعی را می نویسیم تا نزدیک ترین عناصر را که در زیر یک عنصر مرجع قرار گرفته اند، پیدا کنیم:

def find_label_below(word_info):
    x = word_info['box'][0]
    y = word_info['box'][1]
    candidate = words[0]
    candidate_dist = math.inf
    for elem in words:
        if elem['text'] == word_info['text']:
            continue
        curr_box_x = elem['box'][0]
        curr_box_y = elem['box'][1]
        curr_vert_dist = curr_box_y - y
        curr_horiz_dist = x - curr_box_x
        if curr_vert_dist > 0:  # we are only looking for items below
            dist = math.hypot(curr_vert_dist, curr_horiz_dist)
            if dist > candidate_dist:
                continue
            candidate_dist = dist
            candidate = elem
    return candidate
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید این تابع را اعمال کنیم و مرزهای اطراف عناصر شناسایی شده را ترسیم کنیم:

id_info = find_label_below(id_mark_info)
fam_info = find_label_below(fam_mark_info)
name_info = find_label_below(name_mark_info)
name2_info = find_label_below(name_info)
canvas = image.copy()
draw_bounding_box(canvas, id_info['box'])
draw_bounding_box(canvas, fam_info['box'])
draw_bounding_box(canvas, name_info['box'])
draw_bounding_box(canvas, name2_info['box'])
cv2.imwrite('result.png', canvas)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید آنچه را که تاکنون به دست آورده ایم مرور کنیم:

توضیحات تصویر

به نظر می رسد که ما با موفقیت فیلدهای لازم را استخراج کرده ایم! 😊

نهایی کردن نتایج

با توجه به تمام مواردی که پوشش دادیم، بیایید یک برنامه عملی ایجاد کنیم که به OpenCV متکی نباشد. این برنامه مسیر تصویر را به عنوان آرگومان می پذیرد و شماره شناسه و نام کامل را در ترمینال نمایش می دهد.

#!/usr/bin/env python3

import math
import sys

import requests

API_URL = 'https://demo.api4ai.cloud/ocr/v1/results?algo=simple-words'

ID_MARK = '4d.DLN'
FAMILY_MARK = '1.FAMILY'
NAME_MARK = '2.GIVEN'
ADDRESS_MARK = '8.ADDRESS'


def find_text_below(words, word_info):
    x = word_info['box'][0]
    y = word_info['box'][1]
    candidate = words[0]
    candidate_dist = math.inf
    for elem in words:
        if elem['text'] == word_info['text']:
            continue
        curr_box_x = elem['box'][0]
        curr_box_y = elem['box'][1]
        curr_vert_dist = curr_box_y - y
        curr_horiz_dist = x - curr_box_x
        if curr_vert_dist > 0:  # we are only looking for items below
            dist = math.hypot(curr_vert_dist, curr_horiz_dist)
            if dist > candidate_dist:
                continue
            candidate_dist = dist
            candidate = elem
    return candidate


if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('Expected one argument: path to image.')
        sys.exit(1)
    image_path = sys.argv[1]
    with open(image_path, 'rb') as f:
        response = requests.post(API_URL, files={'image': f})
    json_obj = response.json()
    words = []
    for elem in json_obj['results'][0]['entities'][0]['objects']:
        box = elem['box']
        text = elem['entities'][0]['text']
        words.append({'box': box, 'text': text})

    id_mark_info = {}
    fam_mark_info = {}
    name_mark_info = {}

    for elem in words:
        if elem['text'] == ID_MARK:
            id_mark_info = elem
        elif elem['text'] == FAMILY_MARK:
            fam_mark_info = elem
        elif elem['text'] == NAME_MARK:
            name_mark_info = elem

    license = find_text_below(words, id_mark_info)['text']
    family_name = find_text_below(words, fam_mark_info)['text']
    name1_info = find_text_below(words, name_mark_info)
    name1 = name1_info['text']
    name2 = find_text_below(words, name1_info)['text']

    if name2 == ADDRESS_MARK:  # no second name
        full_name = f'{name1} {family_name}'
    else:  # with second name
        full_name = f'{name1} {name2} {family_name}'

    print(f'Driver license: {license}')
    print(f'Full name:      {full_name}')
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی برنامه برای تصویر ارائه شده در ابتدا، به عنوان آرگومان اول:

License:   A9999999
Full name: ANGELINA GABRIELA JONES
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این برنامه را می توان به راحتی برای استخراج اطلاعات اضافی از گواهینامه های رانندگی تغییر داد. در حالی که ما به همه مشکلات احتمالی اشاره نکردیم، زیرا هدف اصلی نشان دادن کاربرد عملی API بود، فضای زیادی برای خواننده وجود دارد تا بهبودها را انجام دهد. به عنوان مثال، برای مدیریت تصاویر چرخانده شده، می توانید زاویه چرخش را از فیلدهای کلیدی محاسبه کنید و از آن اطلاعات برای مکان یابی عناصر “زیر” با مقادیر فیلد استفاده کنید. آن را امتحان کنید! با استفاده از این مفاهیم کلی، می توانید منطق را برای انواع دیگر اسناد و تصاویر حاوی متن پیاده سازی کنید.

برای کسب اطلاعات بیشتر، به مستندات OCR API مراجعه کنید و نمونه های کد نوشته شده در زبان های برنامه نویسی مختلف را بررسی کنید.

در این آموزش، شما را از طریق فرآیند گام به گام استفاده از آن راهنمایی کرده ایم [API4AI OCR API](https://api4.ai/apis/ocr برای شناسایی و استخراج اطلاعات از گواهینامه رانندگی ایالات متحده. ما با درک اصول اولیه فناوری OCR و کاربردهای متنوع آن شروع کردیم. سپس مزایای استفاده از یک OCR API عمومی نسبت به تخصصی را مورد بحث قرار دادیم. راه حل ها، با تاکید بر مقرون به صرفه بودن، انعطاف پذیری و مقیاس پذیری.

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

استفاده از OCR برای تشخیص گواهینامه رانندگی مزایای بی شماری را به همراه دارد. استخراج داده ها را خودکار می کند، تلاش دستی را کاهش می دهد و خطاها را به حداقل می رساند، که می تواند به طور قابل توجهی کارایی عملیاتی را در صنایعی مانند اجاره خودرو، موسسات مالی و سازمان های دولتی افزایش دهد. علاوه بر این، سازگاری API های OCR عمومی امکان سفارشی سازی و کاربرد در انواع مختلف اسناد و موارد استفاده را فراهم می کند.

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

از اینکه این آموزش را دنبال کردید متشکرم. امیدواریم برای شما مفید و مفید بوده باشد. برای جزئیات بیشتر و استفاده پیشرفته، حتماً اسناد OCR API را بررسی کنید و نمونه‌های اضافی را در زبان‌های برنامه‌نویسی مختلف بررسی کنید. کد نویسی مبارک!

پیوندهای اسناد API4AI OCR API

برای بررسی ویژگی‌ها و قابلیت‌های API4AI OCR API با جزئیات بیشتر، به مستندات رسمی مراجعه کنید. این راهنماهای جامع، مثال‌های کد و توضیحات مفصل در مورد نقاط پایانی API ارائه می‌کند و به شما کمک می‌کند تا از OCR در برنامه‌های خود بهترین استفاده را ببرید.

مطالعه بیشتر در مورد فناوری OCR و پردازش تصویر

برای کسانی که به دنبال تعمیق درک خود از فناوری OCR و پردازش تصویر هستند، در اینجا منابع ارزشمندی وجود دارد:

کتاب ها:

  • “پردازش تصویر دیجیتال” توسط رافائل سی. گونزالس و ریچارد ای. وودز
  • “تسلط بر OpenCV 4 با پایتون” اثر آلبرتو فرناندز ویلان
  • “یادگیری عمیق برای بینایی کامپیوتری” نوشته راجالینگپاا شانموگامانی

مقالات و مقالات:

وب سایت ها:

  • Towards Data Science – پلتفرمی با مقالات متعدد در مورد یادگیری ماشینی، یادگیری عمیق و پردازش تصویر.

  • OpenCV – سایت رسمی برای OpenCV، شامل آموزش ها و مستندات.

پیوند به دوره ها و آموزش های مرتبط

مهارت های عملی خود را تقویت کنید و تجربه عملی را با این آموزش ها و دوره های متمرکز بر OCR و پردازش تصویر به دست آورید:

آموزش ها:

دوره های آنلاین:

با کاوش در این منابع تکمیلی، می توانید دانش خود را در مورد فناوری OCR گسترش دهید، مهارت های خود را تقویت کنید و روش های نوآورانه ای را برای اعمال OCR در پروژه های خود کشف کنید. از سفر یادگیری خود لذت ببرید!

اطلاعات بیشتر در مورد وب، ابر، هوش مصنوعی و API برای پردازش تصویر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا