|
O'zbekiston respublikasi raqamli texnologiyalar vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti
|
bet | 14/15 | Sana | 20.05.2024 | Hajmi | 1,32 Mb. | | #246844 |
Bog'liq SHAXZOD (induvidual loyiha 2)2.3 Asosiy kod qismi
3– rasm. Kerakli modullarni o’rnatib oldik
4– rasm. Kerakli kutubxonalarni o’rnatib oldik
Ushbu kutubxonalar haqida loyihamizning 2.2 qismida yoritib o’tganmiz. Ushub rasmda google colab tasvirlangan. Chap tomonimizda google colabga yuklagan va saqlaydigan fayllar qismi, o’ng tomonda esa kod qismi. Agar kod muvaffaqiyatli bajarilgan bo’lsa yashil tasdiqlash belgisi chiqadi. Ko’rib turganingizdek modullar va kutubxonalar muvaffaqiyatli o’rnatilgan.
5 – rasm. Tasvirda OCRni bajarish funksiya kodi
Bu funksiya tasvirdagi matnni o'qib, OCR (Optical Character Recognition) yordamida aniqlash uchun ishlatiladi. Bu funksiya uchun bir nechta qadam mavjud:
cv2.imread(image_path): Bu qadam rasmni OpenCV yordamida o'qib olish uchun image_path parametri tasvir faylining joylashgan manzilni o'z ichiga oladi.
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY): Ranglar to'plamini kulrangga aylantirish uchun. OCR kamroq vaqt sarflaydi va tasvirni to'g'ri o'qish uchun o'qishni osonlashtiradi.
pytesseract.image_to_string(Image.fromarray(gray)): Pytesseract yordamida OCR ni bajaradi. Image.fromarray(gray) bilan, OpenCV-ni ishlatib olingan tasvirni Pytesseract uchun mos formatga o'tkazadi.
empty_line_count: Qo'shimcha bo'sh qatorlarni olib tashlaydi va natijadagi matnni sifatliro'q yaratadi. Bu, matnda bo'sh qatorlarining konsekuensiyanini kamaytiradi.
Natijani qaytarish: Natijadagi matn va natijadagi tasvirlarni chiqarish uchun bir qator joy qoldiradi va natijani qaytaradi.
Shunday qilib, bu funksiya tasvirni o'qib, matnni aniqlaydi, unga qo'shimcha o’zgartirishlar qo'shib, natijani qaytaradi.
6 – rasm. Tasvir va matnni yonma-yon ekranga chiqarish.
Bu funksiya tasvir va matnni yonma-yon ko'rsatish uchun ishlatiladi. Ushbu funksiya quyidagi qadamlardan iborat
Image.open(image_path): Tasvirni ochish. image_path parametri tasvir faylining joylashgan manzilni o'z ichiga oladi.
img.thumbnail((300, 300)): Tasvirni o'lchamini sozlash. Tasvir o'lchamini boshqarish va o'lchamni belgilash uchun foydalaniladi.
BytesIO(): Tasvirni bayt larini saqlash uchun BytesIO obyekti yaratiladi.
img.save(img_byte_array, format='PNG', quality=95): Tasvirni yaxshilash. Tasvirni PNG formatiga o'zgartirib va sifatini yuqori sifatga olib borish uchun foydalaniladi
img_byte_array.getvalue(): Tasvirni baytlarini olish.
text.strip(): Matn boshida va oxirida bo'sh joylarni olib tashlash. Bu, matndagi bo'sh joylarni kamaytiradi.
base64.b64encode(img_data).decode(): Tasvirni Base64 kodlash. Tasvir baytlarini Base64 formatiga o'zgartiradi va uning kodini olish uchun foydalaniladi.
display.HTML(): HTML yordamida tasvir va matnni yonma-yon ko'rsatadi.
Shunday qilib, ushbu funksiya tasvirni o'lchash, matnni tuzish, tasvirni Base64 formatiga o'zgartirib HTML yordamida ko'rsatish uchun ishlatiladi.
7 – rasm. Tasvirlarni tsiklda qayta ishlash.
Ko’rib turganingizdek kod holi ishga tushirilmagan va fayllar qismida bizga tegishli hech qanday fayl yo’q.
Ushbu kod rasmlardan OCR bajarish va o'qitilgan havolalarni o'chirish uchun ishlatiladi. Kod quyidagi qadamlardan iborat:
while True:: Sonsiz tsikl (infinite loop) boshlanadi, bu tsikl foydalanuvchi davom etishni to'g'rilaydigan vaqtgacha rasm yuklash imkoniyatini beradi.
uploaded_files = files.upload(): Foydalanuvchidan rasmlarni yuklashni so'raydi. Yuklangan rasmlar uploaded_files nomli ro'yxatga saqlanadi.
if not uploaded_files: break: Agar hech qanday fayl yuklanmasa, tsikldan chiqish bajariladi.
for image_filename, image_content in uploaded_files.items():: Yuklangan har bir rasmda qayta ishlash tsikli boshlanadi.
with open(image_filename, 'wb') as f: f.write(image_content): Rasmlarni faylga yozish orqali saqlanadi.
result_text = perform_ocr(image_filename): perform_ocr funksiyasini ishlatib, OCR orqali matn oladi.
display_image_with_text(image_filename, result_text): Rasmini o'lchash, matnni tuzish va HTML yordamida tasvir va matnni ekranga chiqaradi.
download_link = f'Yuklangan {image_filename}': Qayta ishlangan rasm uchun yuklab olish havolasini tuzadi.
display.display(display.HTML(download_link)): Yuklab olish havolasini HTML yordamida ekranga chiqaradi.
user_input = input("Yana rasm yuklashni xohlaysizmi? (xa/yo'q): ").lower(): Foydalanuvchidan keyingi rasmlarni yuklashni xohlaysizmi yoki yo'qmi so'raladi. Foydalanuvchi xohlamasa, tsikldan chiqish amalga oshiriladi.
8 – rasm. Yuqoridagi kodni ishlatyabmiz
Ko’rib turganingizdek kodimiz holi ham ishlamoqda buning sababi biz rasm yuklashimini kutmoqda.
9 – rasm. Fayl yuklash
Ushbu rasmda choose files ga matnini olmoqchi bo’lgan rasmimizni yuklaymiz. Agar yuklamoqchi bo’lmasak Cancel upload tugmasini bosamiz.
10 –rasm. Natija
Ko’rib turganingizdek biz ushbu Choose files ga rasm yukladik va natijani chiqarib berdi. Natija yomon emas, matn va rasm ularni solishtirish uchun yonma-yon turibdi.
11 – rasm. Dastur yana rasm yuklashimizni suramoqda
Ko’rib turganingizdek dastur bizdan yana rasm yuklaymizmi yuqmi suramoqda. Agar ‘xa’ javobini bersak dasturga yana rasm yuklashimiz mumkin bo’ladi. Undan tashqari fayllar qismiga e’tibor bersangiz ushbu rasmni google colabimizga yuklab olgan.
12 – rasm. Qayta yuklash
Ko’rib turganingizdek qayta yuklash uchun tugmalar paydo bo’ldi.
13 – rasm. Yuklangan rasm va uning natijasi
Kurib turganingizdek dastur natijani ekranga chiqardi va yana rasm kiritishimiz mumkinligini so’ramoqda.
14 – rasm. Siklni toxtatish
Ko’rib turganingizdek datur so’roviga ‘yo’q’ javobini berdik. Shundan so’ng dastur to’xtadi va uning muvaffaqiyatli ishlaganini ko’rsatuvchi yashil belgi chiqdi.
Xulosa:
Bu loyihamizda biz tasvirlardagi matnlarni matn ko’rinishda olishni amalga oshirdik. Ushbu loyihani python dasturlash tilida, google colab online muhitida bajardik. Ushbu loyihada pythondagi tayyor kutubxona va modullardan foydalandik va mavzuga oid soda dasturni tuzdik. Dastur muvaffaqiyatli ishladi va natijalarni bizga taqdim etdi. Biz amalga oshirgan dasturimiz bilan murakkab bo’lmagan tasvirli matnlar ustida ishlab, natijani taqdim etdik. Dasturimiz lotin alifbosidagi matnli tasvirlar ustida test qilib ko’rdik. Krill, Arab yoki Xitoy alifbolaridagi matnlar ustida test qilib ko’rmadik. Undan tashqari matnlarda turli emojlar va belgilarni ham aniq olib bera olmasligi mumkin. Dasturni mukammallashtirish uchun ko’proq vaqt, kuchli mutaxassislar va mablag’ kerak bo’ladi. Ammo qisqa vaqt ichida o’zim qilgan dastur yomon natija bermadi. Kelajakda bu dasturni mukammallashtirishga harakat qilaman.
|
|
Bosh sahifa
Aloqalar
Bosh sahifa
O'zbekiston respublikasi raqamli texnologiyalar vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti
|