জেনারেটিভ ডেটা ইন্টেলিজেন্স

কিভাবে Tesseract, OpenCV এবং Python দিয়ে OCR করবেন

তারিখ:

এই ব্লগ পোস্টে, আমরা সবচেয়ে বেশি ব্যবহৃত Tesseract ইঞ্জিনের পিছনের প্রযুক্তি ব্যাখ্যা করার চেষ্টা করব, যা অপটিক্যাল ক্যারেক্টার রিকগনিশনে গবেষণা করা সর্বশেষ জ্ঞানের সাথে আপগ্রেড করা হয়েছিল।

এই নিবন্ধটি কীভাবে বাস্তবায়ন করতে হয় তার নির্দেশিকা/টিউটোরিয়াল হিসাবেও কাজ করবে OCR করুন টেসার্যাক্ট ইঞ্জিন ব্যবহার করে পাইথনে। আমরা নিম্নলিখিত মডিউলগুলির মাধ্যমে হাঁটব:

  • Tesseract OCR বৈশিষ্ট্য
  • OpenCV ব্যবহার করে OCR-এর জন্য প্রিপ্রসেসিং
  • CLI এবং Python এর সাথে Tesseract চলছে
  • Tesseract ইঞ্জিনের সীমাবদ্ধতা

ভূমিকা

OCR = অপটিক্যাল ক্যারেক্টার রেকগনিশন. অন্য কথায়, ওসিআর সিস্টেম পাঠ্যের একটি দ্বি-মাত্রিক চিত্রকে রূপান্তরিত করে, যাতে মেশিনে প্রিন্ট করা বা হাতে লেখা পাঠ্য তার চিত্র উপস্থাপনা থেকে মেশিন-পঠনযোগ্য পাঠ্যে ধারণ করতে পারে। একটি প্রক্রিয়া হিসাবে OCR সাধারণত যথাসম্ভব নির্ভুলভাবে সম্পাদন করার জন্য বেশ কয়েকটি উপ-প্রক্রিয়া নিয়ে গঠিত। সাবপ্রসেসগুলি হল:

  • ছবির প্রিপ্রসেসিং
  • টেক্সট স্থানীয়করণ
  • অক্ষর বিভাজন
  • চরিত্র স্বীকৃতি
  • পোস্ট প্রসেসিং

উপরের তালিকার সাব-প্রসেসগুলি অবশ্যই আলাদা হতে পারে, তবে এইগুলি স্বয়ংক্রিয় অক্ষর স্বীকৃতির জন্য মোটামুটিভাবে প্রয়োজনীয় পদক্ষেপ। OCR সফ্টওয়্যারে, লিখিত টেক্সট অক্ষর থেকে বিভিন্ন ভাষা ব্যবহার করে সমস্ত অনন্য শব্দ সনাক্ত করা এবং ক্যাপচার করাই এর প্রধান লক্ষ্য।

প্রায় দুই দশক ধরে, অপটিক্যাল ক্যারেক্টার রিকগনিশন সিস্টেম কম্পিউটারাইজড সিস্টেমে স্বয়ংক্রিয় টেক্সট এন্ট্রি প্রদানের জন্য ব্যাপকভাবে ব্যবহৃত হয়ে আসছে। তবুও এই সব সময়ে, প্রচলিত অনলাইন ওসিআর সিস্টেম (যেমন জোনাল ওসিআর) মুষ্টিমেয় টাইপের ফন্ট এবং পৃষ্ঠা বিন্যাসের চেয়ে বেশি পড়তে তাদের অক্ষমতাকে কাটিয়ে উঠতে পারেনি। আনুপাতিকভাবে ব্যবধানযুক্ত টাইপ (যার মধ্যে কার্যত সমস্ত টাইপসেট কপি অন্তর্ভুক্ত), লেজার প্রিন্টার ফন্ট এবং এমনকি অনেক অ-আনুপাতিক টাইপরাইটার ফন্ট, এই সিস্টেমগুলির নাগালের বাইরে থেকে গেছে। এবং এর ফলে, প্রচলিত ওসিআর ডিজিটাল ফর্মে রূপান্তরের প্রয়োজনে মোট নথির সংখ্যার উপর একটি প্রান্তিক প্রভাব কখনোই অর্জন করতে পারেনি।

অপটিক্যাল ক্যারেক্টার রিকগনিশন প্রক্রিয়া (সৌজন্যে)

পরবর্তী প্রজন্মের OCR ইঞ্জিনগুলি গভীর শিক্ষার ক্ষেত্রে সাম্প্রতিক গবেষণাকে কাজে লাগিয়ে উপরে উল্লিখিত এই সমস্যাগুলিকে সত্যিই ভালভাবে মোকাবেলা করে। সর্বজনীনভাবে উপলব্ধ গভীর মডেল এবং বিশাল ডেটাসেটের সংমিশ্রণকে কাজে লাগিয়ে, মডেলগুলি প্রদত্ত কাজগুলিতে অত্যাধুনিক নির্ভুলতা অর্জন করে। আজকাল এটাও সম্ভব সিন্থেটিক ডেটা তৈরি করা জেনারেটিভ অ্যাডভারসারিয়াল নেটওয়ার্ক এবং কিছু অন্যান্য জেনারেটিভ পন্থা ব্যবহার করে বিভিন্ন ফন্টের সাথে।

অপটিক্যাল ক্যারেক্টার রিকগনিশন থাকে ক চ্যালেঞ্জিং সমস্যা যখন পাঠ্য অনিয়ন্ত্রিত পরিবেশে ঘটে, যেমন প্রাকৃতিক দৃশ্য, জ্যামিতিক বিকৃতি, জটিল পটভূমি এবং বিভিন্ন ফন্টের কারণে। ডিপ লার্নিং ভিত্তিক ওসিআর-এর মতো বিভিন্ন ব্যবহারের ক্ষেত্রে প্রযুক্তিটি এখনও একটি অপার সম্ভাবনা ধারণ করে


মনে মনে ওসিআর সমস্যা আছে? আপনার প্রতিষ্ঠানের ডেটা এন্ট্রি ব্যয় হ্রাস করতে চান? যাও মাথা ন্যানোনেটস এবং OCR মডেল তৈরি করুন ছবি থেকে পাঠ্য নিষ্কাশন or পিডিএফ থেকে ডেটা বের করুন AI ভিত্তিক পিডিএফ ওসিআর!


সেখানে প্রচুর অপটিক্যাল ক্যারেক্টার রেকগনিশন সফ্টওয়্যার উপলব্ধ। আমি তাদের মধ্যে কোন মানের তুলনা খুঁজে পাইনি, তবে আমি তাদের মধ্যে কিছু সম্পর্কে লিখব যেগুলি সবচেয়ে বিকাশকারী-বান্ধব বলে মনে হচ্ছে।

টেসেরাক্ত – একটি ওপেন সোর্স OCR ইঞ্জিন যা OCR ডেভেলপারদের মধ্যে জনপ্রিয়তা অর্জন করেছে। যদিও কখনও কখনও এটি বাস্তবায়ন এবং সংশোধন করা বেদনাদায়ক হতে পারে, বাজারে দীর্ঘতম সময়ের জন্য খুব বেশি বিনামূল্যে এবং শক্তিশালী OCR বিকল্প ছিল না। Tesseract পিএইচডি হিসাবে শুরু হয়েছিল। HP ল্যাবস, ব্রিস্টল গবেষণা প্রকল্প. এটি জনপ্রিয়তা অর্জন করে এবং 1984 এবং 1994 সালের মধ্যে HP দ্বারা বিকাশ করা হয়েছিল। 2005 সালে HP একটি ওপেন-সোর্স সফ্টওয়্যার হিসাবে Tesseract প্রকাশ করে। 2006 সাল থেকে এটি Google দ্বারা বিকশিত হয়।

বিভিন্ন ওপেন সোর্স ওসিআর টুলের জন্য গুগল ট্রেন্ডের তুলনা

OCRopus – OCRopus হল একটি ওপেন সোর্স OCR সিস্টেম যা গবেষক এবং কোম্পানি উভয়ের দ্বারা OCR উপাদানগুলির সহজ মূল্যায়ন এবং পুনঃব্যবহারের অনুমতি দেয়। নথি বিশ্লেষণ প্রোগ্রামের একটি সংগ্রহ, একটি টার্ন-কি OCR সিস্টেম নয়। আপনার নথিতে এটি প্রয়োগ করতে, আপনাকে কিছু চিত্র প্রিপ্রসেসিং করতে হবে এবং সম্ভবত নতুন মডেলগুলিকে প্রশিক্ষণ দিতে হবে। স্বীকৃত স্ক্রিপ্টগুলি ছাড়াও, গ্রাউন্ড ট্রুথ এডিটিং এবং সংশোধন, ত্রুটির হার পরিমাপ, বিভ্রান্তি ম্যাট্রিক্স নির্ধারণের জন্য বেশ কয়েকটি স্ক্রিপ্ট রয়েছে যা ব্যবহার এবং সম্পাদনা করা সহজ।


চাক্ষুষ - একাধিক ভাষায় লেখা সহ হ্যান্ড প্রেস ব্যবহার করে মুদ্রিত নথিগুলিতে ওকুলার সবচেয়ে ভাল কাজ করে। এটি কমান্ড লাইন ব্যবহার করে কাজ করে। এটি একটি অত্যাধুনিক ঐতিহাসিক ওসিআর সিস্টেম। এর প্রাথমিক বৈশিষ্ট্য হল:

  • অজানা হরফগুলির তত্ত্বাবধানহীন শিক্ষা: শুধুমাত্র নথির চিত্র এবং পাঠ্যের একটি কর্পাস প্রয়োজন৷
  • কোলাহলপূর্ণ নথিগুলি পরিচালনা করার ক্ষমতা: অসামঞ্জস্যপূর্ণ কালি, ব্যবধান, উল্লম্ব প্রান্তিককরণ
  • বহুভাষিক নথিগুলির জন্য সমর্থন, যার মধ্যে যথেষ্ট শব্দ-স্তরের কোড-স্যুইচিং রয়েছে।
  • পুরাতন বানান এবং প্রিন্টার শর্টহ্যান্ড সহ অর্থোগ্রাফিক বৈচিত্র্যের নিদর্শনগুলির তত্ত্বাবধানহীন শিক্ষা।
  • যুগপত, যৌথ প্রতিলিপি উভয় কূটনৈতিক (আক্ষরিক) এবং স্বাভাবিক আকারে।

সুইফটওসিআর – আমি সুইফটে লেখা ওসিআর ইঞ্জিনের কথাও উল্লেখ করব কারণ গভীর শিক্ষার জন্য ব্যবহৃত ডেভেলপমেন্ট প্রোগ্রামিং ভাষা হিসেবে সুইফটের ব্যবহারকে অগ্রসর করার জন্য ব্যাপক উন্নয়ন করা হচ্ছে। চেক আউট ব্লগ কেন আরো খুঁজে বের করতে. SwiftOCR হল একটি দ্রুত এবং সহজ OCR লাইব্রেরি যা ইমেজ শনাক্তকরণের জন্য নিউরাল নেটওয়ার্ক ব্যবহার করে। SwiftOCR দাবি করে যে তাদের ইঞ্জিন সুপরিচিত টেসার্যাক্ট লাইব্রেরিকে ছাড়িয়ে গেছে।

এই ব্লগ পোস্ট, আমরা করা হবে Tesseract OCR উপর ফোকাস করুন এবং এটি কীভাবে কাজ করে এবং কীভাবে এটি ব্যবহার করা হয় সে সম্পর্কে আরও জানুন।


Tesseract ওসিআর

Tesseract হল একটি ওপেন সোর্স টেক্সট রিকগনিশন (OCR) ইঞ্জিন, Apache 2.0 লাইসেন্সের অধীনে উপলব্ধ। এটি সরাসরি ব্যবহার করা যেতে পারে, বা (প্রোগ্রামারদের জন্য) ছবি থেকে মুদ্রিত পাঠ্য বের করতে API ব্যবহার করে। এটি বিভিন্ন ধরনের ভাষা সমর্থন করে। Tesseract এর একটি অন্তর্নির্মিত GUI নেই, তবে এর থেকে বেশ কয়েকটি উপলব্ধ রয়েছে৷ তৃতীয় পক্ষের পৃষ্ঠা. Tesseract অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজ এবং ফ্রেমওয়ার্কের সাথে সামঞ্জস্যপূর্ণ র‍্যাপারের মাধ্যমে যা পাওয়া যায় এখানে. এটি একটি বড় নথির মধ্যে পাঠ্য সনাক্ত করতে বিদ্যমান বিন্যাস বিশ্লেষণের সাথে ব্যবহার করা যেতে পারে, বা এটি একটি একক পাঠ্য লাইনের একটি চিত্র থেকে পাঠ্য সনাক্ত করতে একটি বহিরাগত পাঠ্য আবিষ্কারকের সাথে একযোগে ব্যবহার করা যেতে পারে।

A থেকে Tesseract এর সাথে API তৈরি করতে OCR প্রসেস ফ্লো ব্লগ পোস্ট

Tesseract 4.00 একটি টেক্সট লাইন সনাক্তকারী হিসাবে কনফিগার করা একটি নতুন নিউরাল নেটওয়ার্ক সাবসিস্টেম অন্তর্ভুক্ত করে। এর উৎপত্তি আছে OCRopus' পাইথন-ভিত্তিক LSTM বাস্তবায়ন কিন্তু C++ তে Tesseract এর জন্য পুনরায় ডিজাইন করা হয়েছে। টেসার্যাক্টের নিউরাল নেটওয়ার্ক সিস্টেমটি টেনসরফ্লো-এর পূর্ব-তারিখ কিন্তু এটির সাথে সামঞ্জস্যপূর্ণ, কারণ ভেরিয়েবল গ্রাফ স্পেসিফিকেশন ল্যাঙ্গুয়েজ (ভিজিএসএল) নামে একটি নেটওয়ার্ক বর্ণনা ভাষা রয়েছে, যা টেনসরফ্লো-এর জন্যও উপলব্ধ।

একটি একক অক্ষর সম্বলিত একটি চিত্র সনাক্ত করতে, আমরা সাধারণত একটি কনভোল্যুশনাল নিউরাল নেটওয়ার্ক (CNN) ব্যবহার করি। নির্বিচারে দৈর্ঘ্যের পাঠ্য অক্ষরের একটি ক্রম, এবং এই ধরনের সমস্যাগুলি RNN ব্যবহার করে সমাধান করা হয় এবং LSTM হল RNN-এর একটি জনপ্রিয় রূপ। সম্পর্কে আরো জানতে এই পোস্ট পড়ুন এলএসটিএম.


প্রযুক্তি - এটি কিভাবে কাজ করে

LSTMগুলি ক্রম শেখার ক্ষেত্রে দুর্দান্ত তবে রাজ্যের সংখ্যা খুব বেশি হলে অনেক ধীর হয়ে যায়। এমন অভিজ্ঞতামূলক ফলাফল রয়েছে যা পরামর্শ দেয় যে অনেক ক্লাসের একটি সংক্ষিপ্ত সিকোয়েন্সের চেয়ে একটি LSTM-কে একটি দীর্ঘ ক্রম শিখতে বলা ভাল। Tesseract পাইথনের OCRopus মডেল থেকে বিকশিত হয়েছে যা C++ এ LSMT এর একটি কাঁটা ছিল, CLSTM নামে পরিচিত। CLSTM হল C++-এ LSTM পুনরাবৃত্ত নিউরাল নেটওয়ার্ক মডেলের একটি বাস্তবায়ন, সংখ্যাসূচক গণনার জন্য Eigen লাইব্রেরি ব্যবহার করে।

Tesseract 3 OCR প্রক্রিয়া থেকে কাগজ

Legacy Tesseract 3.x বহু-পর্যায়ের প্রক্রিয়ার উপর নির্ভরশীল ছিল যেখানে আমরা ধাপগুলিকে আলাদা করতে পারি:

  • শব্দ অনুসন্ধান
  • লাইন ফাইন্ডিং
  • চরিত্রের শ্রেণীবিভাগ

ব্লবগুলিতে পাঠ্য লাইনগুলি সংগঠিত করে শব্দ অনুসন্ধান করা হয়েছিল এবং নির্দিষ্ট পিচ বা আনুপাতিক পাঠ্যের জন্য লাইন এবং অঞ্চলগুলি বিশ্লেষণ করা হয়। অক্ষরের ব্যবধানের ধরন অনুসারে পাঠ্য লাইনগুলিকে আলাদাভাবে শব্দে ভাঙ্গা হয়। স্বীকৃতি তারপর একটি দ্বি-পাস প্রক্রিয়া হিসাবে এগিয়ে যায়। প্রথম পাসে, প্রতিটি শব্দকে পালাক্রমে চেনার চেষ্টা করা হয়। সন্তোষজনক প্রতিটি শব্দ প্রশিক্ষণের ডেটা হিসাবে একটি অভিযোজিত শ্রেণিবিন্যাসকারীকে প্রেরণ করা হয়। অভিযোজিত শ্রেণিবিন্যাসকারী তারপর পৃষ্ঠার নিচের পাঠ্যকে আরও সঠিকভাবে সনাক্ত করার সুযোগ পায়।

Tesseract টুলের আধুনিকীকরণ ছিল কোড পরিষ্কার করার এবং একটি নতুন LSTM মডেল যোগ করার একটি প্রচেষ্টা। ইনপুট চিত্রটি বাক্সে (আয়তক্ষেত্র) লাইনে প্রক্রিয়া করা হয় লাইন দ্বারা LSTM মডেলে ফিড করে এবং আউটপুট দেয়। নীচের ছবিতে আমরা এটি কীভাবে কাজ করে তা কল্পনা করতে পারি।

কিভাবে Tesseract LSTM মডেল ব্যবহার করে উপহার

একটি নতুন প্রশিক্ষণ সরঞ্জাম যোগ করার পরে এবং প্রচুর ডেটা এবং ফন্ট সহ মডেলটিকে প্রশিক্ষণ দেওয়ার পরে, Tesseract আরও ভাল কর্মক্ষমতা অর্জন করে। তবুও, হাতে লেখা পাঠ্য এবং অদ্ভুত ফন্টগুলিতে কাজ করার জন্য যথেষ্ট ভাল নয়। পরীক্ষা-নিরীক্ষার জন্য উপরের স্তরগুলিকে সূক্ষ্ম সুর করা বা পুনরায় প্রশিক্ষণ দেওয়া সম্ভব।


Tesseract ইনস্টল করা হচ্ছে

Windows-এ tesseract ইনস্টল করা প্রি-কম্পাইল করা বাইনারিগুলির সাথে সহজ এখানে. "পাথ" এনভায়রনমেন্ট ভেরিয়েবল সম্পাদনা করতে এবং টেসারেক্ট পাথ যোগ করতে ভুলবেন না। লিনাক্স বা ম্যাক ইনস্টলেশনের জন্য এটি ইনস্টল করা আছে কয়েকটি কমান্ড.

ইনস্টলেশনের পরে যাচাই করুন যে সবকিছু টার্মিনালে বা cmd টাইপ করে কাজ করছে:

$ tesseract --version

এবং আপনি অনুরূপ আউটপুট দেখতে পাবেন:

tesseract 4.0.0
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8
Found AVX2
Found AVX
Found SSE

আপনি পিপ ব্যবহার করে এর পরে টেসারেক্টের জন্য পাইথন র্যাপার ইনস্টল করতে পারেন।
$ pip install pytesseract

Tesseract লাইব্রেরি tesseract নামক একটি সহজ কমান্ড-লাইন টুল দিয়ে পাঠানো হয়। আমরা এই টুলটি ইমেজে OCR সঞ্চালনের জন্য ব্যবহার করতে পারি এবং আউটপুট একটি টেক্সট ফাইলে সংরক্ষণ করা হয়। আমরা যদি আমাদের C++ বা পাইথন কোডে Tesseract সংহত করতে চাই, আমরা Tesseract এর API ব্যবহার করব।


CLI এর সাথে Tesseract চলমান

এর সাথে ইমেজে Tesseract ইঞ্জিনকে কল করুন চিত্র_পথ এবং নিম্নলিখিত টাইপ করে কমান্ড প্রম্পটে লাইন দ্বারা লাইন লিখিত, টেক্সটে ইমেজ রূপান্তর করুন:

$ tesseract image_path stdout

একটি ফাইলে আউটপুট পাঠ্য লিখতে:

$ tesseract image_path text_result.txt

ভাষার মডেলের নাম নির্দিষ্ট করতে, পরে ভাষা শর্টকাট লিখুন -l পতাকা, ডিফল্টরূপে এটি ইংরেজি ভাষা লাগে:

$ tesseract image_path text_result.txt -l eng

ডিফল্টরূপে, Tesseract পাঠ্যের একটি পৃষ্ঠা আশা করে যখন এটি একটি চিত্রকে ভাগ করে। আপনি যদি শুধুমাত্র একটি ছোট অঞ্চলের OCR করতে চান, তাহলে ব্যবহার করে একটি ভিন্ন বিভাজন মোড চেষ্টা করুন -পিএসএম যুক্তি. পাওয়া যাবে 14 মোড উপলব্ধ আছে এখানে. ডিফল্টরূপে, Tesseract সম্পূর্ণরূপে পৃষ্ঠা বিভাজন স্বয়ংক্রিয় করে কিন্তু অভিযোজন এবং স্ক্রিপ্ট সনাক্তকরণ সম্পাদন করে না। পরামিতি নির্দিষ্ট করতে, নিম্নলিখিত টাইপ করুন:

$ tesseract image_path text_result.txt -l eng --psm 6

আরও একটি গুরুত্বপূর্ণ যুক্তি রয়েছে, OCR ইঞ্জিন মোড (oem)। Tesseract 4-এ দুটি OCR ইঞ্জিন রয়েছে — Legacy Tesseract ইঞ্জিন এবং LSTM ইঞ্জিন। -oem বিকল্প ব্যবহার করে চারটি মোড বেছে নেওয়া হয়েছে।
শুধুমাত্র লিগ্যাসি ইঞ্জিন।
1 নিউরাল নেট LSTM ইঞ্জিন শুধুমাত্র।
2টি লিগ্যাসি + LSTM ইঞ্জিন।
3 ডিফল্ট, যা উপলব্ধ তার উপর ভিত্তি করে।

Tesseract OCR ইঞ্জিনের ফলাফল

Pytesseract এবং OpenCV সহ OCR

Pytesseract বা Python-tesseract হল পাইথনের জন্য একটি OCR টুল যা Tesseract-OCR ইঞ্জিনের জন্য একটি মোড়ক হিসাবেও কাজ করে। এটি ইমেজের টেক্সট পড়তে এবং চিনতে পারে এবং সাধারণত পাইথন ওসিআর ইমেজ থেকে টেক্সট ব্যবহারের ক্ষেত্রে ব্যবহৃত হয়।

এটি টেসারেক্ট করার জন্য একটি স্বতন্ত্র আমন্ত্রণ স্ক্রিপ্ট হিসাবেও দরকারী, কারণ এটি জেপিইজি, পিএনজি, জিআইএফ, বিএমপি, টিফ এবং অন্যান্য সহ পিলো এবং লেপ্টোনিকা ইমেজিং লাইব্রেরি দ্বারা সমর্থিত সমস্ত চিত্রের ধরন পড়তে পারে।

পাইথন পদ্ধতি সম্পর্কে আরও তথ্য পড়ুন এখানে. এই টিউটোরিয়ালের কোড এখানে পাওয়া যাবে সংগ্রহস্থলের.

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Tesseract জন্য প্রিপ্রসেসিং

আপনার টেসার্যাক্ট আউটপুট নির্ভুলতা হ্রাস পেতে পারে এমন সমস্ত উপায় এড়াতে, আপনাকে নিশ্চিত করতে হবে যে ছবিটি যথাযথভাবে আছে প্রাক-প্রক্রিয়াজাত.

এর মধ্যে রয়েছে রিস্কেলিং, বাইনারাইজেশন, নয়েজ রিমুভাল, ডেস্কিং ইত্যাদি।

OCR-এর জন্য ইমেজ প্রিপ্রসেস করতে, নিম্নলিখিত পাইথন ফাংশনগুলির মধ্যে যেকোন একটি ব্যবহার করুন বা অনুসরণ করুন OpenCV ডকুমেন্টেশন.

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 

জিনিসগুলি আরও ভাল দেখতে একটি উদাহরণ দিয়ে কাজ করা যাক। আমাদের আসল ছবিটি দেখতে এইরকম -

অরেবেশ লেখার পদ্ধতি

নিচের কোড দিয়ে প্রিপ্রসেস করার পর

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)

এবং ফলস্বরূপ ইমেজ প্লটিং, আমরা নিম্নলিখিত ফলাফল পেতে.

প্রিপ্রসেসিং পরে ইমেজ

আসল ছবির আউটপুট দেখতে এইরকম -

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED

এখানে বিভিন্ন প্রিপ্রসেসড ইমেজের আউটপুট কেমন দেখায় -

ক্যানি এজ ইমেজ (অত ভালো নয়)-

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im

থ্রেশহোল্ড ছবি -

GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH

খোলার ছবি-

GALACTIC BASIC
(AUREZEBELSH)
KEE VTMEUOU EB iw oN es
A BC D EF F @ H | J K LT Ww
AOGdrcrT7WTt HYOAVa4
WO P Q R BS T U VW WK y Z
i J
Oo 1 2 3 46 8 7 SC Ps,
VY ir- -rp,ptUuY?
a a a
AGoOAnNnoOID
CH AE BO KH ®@ OO SH TH

পাঠ্যের চারপাশে বাক্স পাওয়া যাচ্ছে

Pytesseract ব্যবহার করে, আপনি নিম্নলিখিত ব্যবহার করে আপনার OCR ফলাফলের জন্য বাউন্ডিং বক্সের তথ্য পেতে পারেন কোড.

নীচের স্ক্রিপ্টটি আপনাকে OCR চলাকালীন টেসার্যাক্ট দ্বারা সনাক্ত করা প্রতিটি অক্ষরের জন্য বাউন্ডিং বক্সের তথ্য দেবে।

import cv2
import pytesseract

img = cv2.imread('image.jpg')

h, w, c = img.shape
boxes = pytesseract.image_to_boxes(img) 
for b in boxes.splitlines():
    b = b.split(' ')
    img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

আপনি যদি অক্ষরের পরিবর্তে শব্দের চারপাশে বাক্স চান তবে ফাংশন image_to_data কাজে আসবে। আপনি ব্যবহার করতে পারেন image_to_data pytesseract দিয়ে নির্দিষ্ট আউটপুট টাইপ সহ ফাংশন Output.


মনে মনে ওসিআর সমস্যা আছে? চালান, পিডিএফ বা নম্বর প্লেট ডিজিটালাইজ করতে চান? হেড ন্যানোনেটস এবং বিল্ড বিনামূল্যে অনলাইন OCR বিনামূল্যে মডেল!


আমরা আমাদের টেসার্যাক্ট আউটপুট পরীক্ষা করার জন্য উপরের নমুনা চালান চিত্রটি ব্যবহার করব।

import cv2
import pytesseract
from pytesseract import Output

img = cv2.imread('invoice-sample.jpg')

d = pytesseract.image_to_data(img, output_type=Output.DICT)
print(d.keys())

এটি আপনাকে নিম্নলিখিত আউটপুট দিতে হবে -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

এই অভিধানটি ব্যবহার করে, আমরা প্রতিটি শব্দ শনাক্ত করতে পারি, তাদের বাউন্ডিং বাক্সের তথ্য, তাদের মধ্যে পাঠ্য এবং প্রতিটির জন্য আত্মবিশ্বাসের স্কোর পেতে পারি।

আপনি নীচের কোড ব্যবহার করে বাক্সগুলি প্লট করতে পারেন -

n_boxes = len(d['text'])
for i in range(n_boxes):
    if int(d['conf'][i]) > 60:
        (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
        img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

একটি নমুনা চালানের চিত্রের জন্য এটি দেখতে কেমন হবে তা এখানে।


টেক্সট টেমপ্লেট ম্যাচিং

একটি চিত্রে একটি তারিখ কোথায় আছে তা খুঁজে বের করার চেষ্টা করার উদাহরণ নিন। এখানে আমাদের টেমপ্লেটটি হবে একটি রেগুলার এক্সপ্রেশন প্যাটার্ন যা আমরা উপযুক্ত বাউন্ডিং বক্স খুঁজে পেতে আমাদের OCR ফলাফলের সাথে মেলাব। আমরা ব্যবহার করব regex মডিউল এবং image_to_data এই জন্য ফাংশন।

import re
import cv2
import pytesseract
from pytesseract import Output

img = cv2.imread('invoice-sample.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
keys = list(d.keys())

date_pattern = '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$'

n_boxes = len(d['text'])
for i in range(n_boxes):
    if int(d['conf'][i]) > 60:
    	if re.match(date_pattern, d['text'][i]):
	        (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
	        img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

প্রত্যাশিত হিসাবে, আমরা ছবিতে চালানের তারিখের চারপাশে একটি বাক্স পেয়েছি।


পৃষ্ঠা বিভাজন মোড

পাঠ্যের একটি পৃষ্ঠা বিশ্লেষণ করার বিভিন্ন উপায় রয়েছে। আপনি যদি শুধুমাত্র একটি ছোট অঞ্চলে বা বিভিন্ন অভিযোজন ইত্যাদিতে OCR চালাতে চান তবে tesseract api বেশ কয়েকটি পৃষ্ঠা বিভাজন মোড সরবরাহ করে।

এখানে tesseract দ্বারা সমর্থিত পৃষ্ঠা বিভাজন মোডগুলির একটি তালিকা রয়েছে -

0 শুধুমাত্র ওরিয়েন্টেশন এবং স্ক্রিপ্ট ডিটেকশন (OSD)।
1 OSD সহ স্বয়ংক্রিয় পৃষ্ঠা বিভাজন।
2 স্বয়ংক্রিয় পৃষ্ঠা বিভাজন, কিন্তু কোন OSD, বা OCR নেই।
3 সম্পূর্ণ স্বয়ংক্রিয় পৃষ্ঠা বিভাজন, কিন্তু কোন OSD নেই। (ডিফল্ট)
4 পরিবর্তনশীল আকারের পাঠ্যের একটি একক কলাম অনুমান করুন।
5 অনুমান করুন উল্লম্বভাবে সারিবদ্ধ পাঠ্যের একটি একক অভিন্ন ব্লক।
6 অনুমান করুন পাঠ্যের একটি একক অভিন্ন ব্লক।
7 চিত্রটিকে একটি একক পাঠ্য লাইন হিসাবে বিবেচনা করুন।
8 চিত্রটিকে একটি একক শব্দ হিসাবে বিবেচনা করুন।
9 চিত্রটিকে একটি বৃত্তে একটি একক শব্দ হিসাবে বিবেচনা করুন।
10 চিত্রটিকে একটি একক অক্ষর হিসাবে বিবেচনা করুন।
11 স্পার্স টেক্সট। কোনো নির্দিষ্ট ক্রমে যতটা সম্ভব পাঠ্য খুঁজুন।
12 OSD সহ স্পার্স টেক্সট।
13 কাঁচা লাইন। টেসার্যাক্ট-নির্দিষ্ট হ্যাকগুলিকে বাইপাস করে চিত্রটিকে একটি একক পাঠ্য লাইন হিসাবে বিবেচনা করুন৷

আপনার পৃষ্ঠা বিভাজন মোড পরিবর্তন করতে, পরিবর্তন করুন --psm আপনার কাস্টম কনফিগারেশন স্ট্রিং-এ উপরে উল্লিখিত মোড কোডগুলির যেকোনো একটিতে যুক্তি।


অভিযোজন এবং স্ক্রিপ্ট সনাক্ত করুন

আপনি আপনার চিত্রের পাঠ্যের অভিযোজন এবং এটি যে স্ক্রিপ্টে লেখা আছে তা সনাক্ত করতে পারেন। নিচের ছবি-
ভাবমূর্তি
নিম্নলিখিত কোড মাধ্যমে চালানোর পরে -

osd = pytesseract.image_to_osd(img)
angle = re.search('(?<=Rotate: )d+', osd).group(0)
script = re.search('(?<=Script: )d+', osd).group(0)
print("angle: ", angle)
print("script: ", script)

নিম্নলিখিত আউটপুট প্রিন্ট করবে।

angle: 90
script: Latin

শুধুমাত্র সংখ্যা সনাক্ত করুন

উদাহরণ স্বরূপ এই ছবিটি নিন-
ভাবমূর্তি
এই ইমেজ থেকে নিষ্কাশিত পাঠ্য এই মত দেখায়.

‘Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no 43876324
Dated 17%h Nov2018
Pono 76496234

আপনি নিম্নলিখিত কনফিগারেশন পরিবর্তন করে শুধুমাত্র সংখ্যা সনাক্ত করতে পারেন

custom_config = r'--oem 3 --psm 6 outputbase digits'
print(pytesseract.image_to_string(img, config=custom_config))

আউটপুট এই মত দেখাবে.

--

. 43876324
172018
0 76496234

হোয়াইটলিস্টিং অক্ষর

বলুন আপনি প্রদত্ত চিত্র থেকে শুধুমাত্র নির্দিষ্ট অক্ষর সনাক্ত করতে চান এবং বাকিগুলিকে উপেক্ষা করতে চান। আপনি নিম্নলিখিত কনফিগারেশন ব্যবহার করে আপনার অক্ষরগুলির সাদাতালিকা নির্দিষ্ট করতে পারেন (এখানে, আমরা শুধুমাত্র a থেকে z পর্যন্ত সমস্ত ছোট হাতের অক্ষর ব্যবহার করেছি)।

custom_config = r'-c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz --psm 6'
print(pytesseract.image_to_string(img, config=custom_config))

আউটপুট -

customername
roject
tnvoleeno
ated

alliumenergyservices
e
thovo

কালো তালিকাভুক্ত অক্ষর

আপনি যদি নিশ্চিত হন যে কিছু অক্ষর বা অভিব্যক্তি অবশ্যই আপনার পাঠ্যে আসবে না (অন্যথায় কালো তালিকাভুক্ত অক্ষরগুলির জায়গায় OCR ভুল পাঠ্য ফিরিয়ে দেবে), আপনি নিম্নলিখিত কনফিগারেশনটি ব্যবহার করে সেই অক্ষরগুলিকে কালো তালিকাভুক্ত করতে পারেন।

custom_config = r'-c tessedit_char_blacklist=0123456789 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

আউটপুট -

Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no
Dated %h Nov%
Pono

একাধিক ভাষায় সনাক্ত করুন

আপনি টার্মিনালে এটি টাইপ করে উপলব্ধ ভাষাগুলি পরীক্ষা করতে পারেন

$ tesseract --list-langs

একটি নির্দিষ্ট ভাষা ব্যবহারের জন্য tesseract ডাউনলোড করতে

$ sudo apt-get install tesseract-ocr-LANG

যেখানে LANG হল আপনার প্রয়োজনীয় ভাষার জন্য তিন অক্ষরের কোড। আপনি LANG মানগুলি খুঁজে পেতে পারেন এখানে.

আপনি ডাউনলোড করতে পারেন .traindata আপনার যে ভাষা থেকে প্রয়োজন তার জন্য ফাইল এখানে এবং এটি রাখুন $TESSDATA_PREFIX ডিরেক্টরি (এটি একই হওয়া উচিত যেখানে tessdata ডিরেক্টরি ইনস্টল করা হয়েছে) এবং এটি ব্যবহারের জন্য প্রস্তুত হওয়া উচিত।

বিঃদ্রঃ – শুধুমাত্র একটি ভাষা আছে .traineddata ফাইল বিন্যাস tesseract দ্বারা সমর্থিত হয়.

আপনার ওসিআর আউটপুট যে ভাষাতে প্রয়োজন তা নির্দিষ্ট করতে, ব্যবহার করুন -l LANG কনফিগারেশনের আর্গুমেন্ট যেখানে আপনি কোন ভাষা ব্যবহার করতে চান তার জন্য LANG হল 3 অক্ষরের কোড।

custom_config = r'-l eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

উদাহরণ স্বরূপ এই ছবিটি নিন-
ভাবমূর্তি
আপনি LANG প্যারামিটার পরিবর্তন করে একাধিক ভাষার সাথে কাজ করতে পারেন -

custom_config = r'-l grc+tha+eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

এবং আপনি নিম্নলিখিত আউটপুট পাবেন -

Here’s some Greek:

Οδιο διστα ιμπεδιτ φιμ ει, αδ φελ αβχορρεανθ ελωκυενθιαμ, εξ εσε εξερσι γυ-
βεργρεν ηας. Ατ μει σολετ σριπτορεμ. ἴυς αλια λαβωρε θε. Σιθ κυωτ νυσκυαμ
τρασυνδια αν, ὠμνιυμ ελιγενδι τιν πρι. Παρτεμ φερθερεμ συσιπιαντὺυρ εξ ιυς,ναμ
%0790 แ ร เง ๑ ๕ 80 ๕ 6 ๑ อ 06 ส 0 เง น อ ๓ , πρω πρωπριαε σαεφολα ιδ. Ατ πρι δολορ νυ-
σκυαμ.

6 Thai

Here’s some Thai: ν᾿

ค อ ร ั ป ซั น จ ุ ้ ย โป ร ด ิ ว เซ อ ร ์ ส ถา ป ั ต ย ์ จ ๊ า บ แจ ็ ก พ ็ อ ต ม ้ า ห ิ น อ ่ อ น ซา ก ุ ร ะ ค ั น ถ ธ ุ ร ะ ฟิ ด ส ต า ร ์ ท ง ี ้ บ อ ย
ค อ ต อ ื ่ ม แป ร ั ส ั ง โฆ ค ํ า ส า ป แฟ น ซี ศิ ล ป ว ั ฒ น ธร ร ม ไฟ ล ท ์ จ ิ ๊ ก โก ๋ ก ั บ ด ั ก เจ ล พ ล ็ อ ต ม า ม ่ า ซา ก ุ ร ะ ด ี ล เล อ
ร ์ ซี น ด ั ม พ ์ แฮ ป ป ี ้ เอ ๊ ้ า ะ อ ุ ร ั ง ค ธา ต ุ ซิ ม ฟิ น ิ ก ซ์ เท ร ล เล ่ อ ร ์ อ ว อ ร ์ ด แค น ย อ น ส ม า พ ั น ธ์ ค ร ั ว ซอ ง ฮั ม อ า
ข่ า เอ ็ ก ซ์ เพ ร ส

বিঃদ্রঃ – প্রথমে যে ভাষাটি উল্লেখ করা হয়েছে -l প্যারামিটার হল প্রাথমিক ভাষা।

দুর্ভাগ্যবশত, টেসার্যাক্টে স্বয়ংক্রিয়ভাবে একটি ছবিতে পাঠ্যের ভাষা সনাক্ত করার বৈশিষ্ট্য নেই। একটি বিকল্প সমাধান অন্য পাইথন মডিউল দ্বারা সরবরাহ করা হয় langdetect যা পাইপের মাধ্যমে ইনস্টল করা যেতে পারে।

$ pip install langdetect

এই মডিউলটি আবার, একটি চিত্র ব্যবহার করে পাঠ্যের ভাষা সনাক্ত করে না তবে ভাষা সনাক্ত করতে স্ট্রিং ইনপুট প্রয়োজন। এটি করার সর্বোত্তম উপায় হ'ল প্রথমে টেসার্যাক্ট ব্যবহার করে ওসিআর টেক্সট পেতে আপনার মনে হতে পারে যে ভাষাতে আছে, ব্যবহার করে langdetect ওসিআর পাঠ্যে কোন ভাষাগুলি অন্তর্ভুক্ত করা হয়েছে তা খুঁজে বের করতে এবং তারপরে পাওয়া ভাষাগুলির সাথে আবার ওসিআর চালান।

বলুন আমাদের কাছে একটি পাঠ্য আছে যা আমরা ভেবেছিলাম ইংরেজি এবং পর্তুগিজ ভাষায়।

custom_config = r'-l eng+por --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

from langdetect import detect_langs
detect_langs(txt)

এটি পাঠ্যে ভাষার তালিকা এবং তাদের সম্ভাব্যতা আউটপুট করা উচিত।

[en:0.714282468983554, es:0.2857145605644145]

ভাষা কোড দ্বারা ব্যবহৃত langdetect ISO 639-1 কোড অনুসরণ করুন। তুলনা করতে, চেক করুন এই এবং এই. আমরা দেখতে পাই যে পাঠ্যটিতে ব্যবহৃত ভাষাটি পরিবর্তে ইংরেজি এবং স্প্যানিশ।

কনফিগারেশন পরিবর্তন করে আমরা আবার পাঠ্যটি পাই

custom_config = r'-l eng+spa --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

বিঃদ্রঃ – Tesseract খারাপভাবে কাজ করে যখন, একাধিক ভাষার সাথে একটি ছবিতে, কনফিগারে উল্লেখ করা ভাষাগুলি ভুল হয় বা একেবারেই উল্লেখ করা হয় না। এটি ল্যাংডিটেক্ট মডিউলটিকেও কিছুটা বিভ্রান্ত করতে পারে।


tessdata_fast ব্যবহার করা

যদি গতি আপনার জন্য একটি প্রধান উদ্বেগ হয়, আপনি আপনার tessdata ভাষা মডেলগুলিকে tessdata_fast মডেলগুলির সাথে প্রতিস্থাপন করতে পারেন যা tessdata মডেলগুলির 8-বিট পূর্ণসংখ্যা সংস্করণ।

tessdata_fast অনুযায়ী GitHub -

এই সংগ্রহস্থলে প্রশিক্ষিত মডেলের দ্রুত পূর্ণসংখ্যা সংস্করণ রয়েছে ওপেন সোর্স ওসিআর ইঞ্জিন পরীক্ষা করুন.

এই মডেলগুলি শুধুমাত্র Tesseract 4 এর LSTM OCR ইঞ্জিনের সাথে কাজ করে।

  • গতি বনাম নির্ভুলতার মধ্যে সেরা "অর্থের মূল্য" কী অফার করে তার জন্য এগুলি একটি গতি/নির্ভুলতার সমঝোতা।
  • কিছু ভাষার জন্য, এটি এখনও সেরা, কিন্তু বেশিরভাগের জন্য নয়।
  • "অর্থের জন্য সর্বোত্তম মূল্য" নেটওয়ার্ক কনফিগারেশনটি আরও গতির জন্য সংহত করা হয়েছিল।
  • বেশিরভাগ ব্যবহারকারী এই প্রশিক্ষিত ডেটা ফাইলগুলি ওসিআর করার জন্য ব্যবহার করতে চাইবেন এবং এগুলি লিনাক্স বিতরণের অংশ হিসাবে প্রেরণ করা হবে যেমন। উবুন্টু 18.04।
  • ফাইন টিউনিং/ক্রমবর্ধমান প্রশিক্ষণ হবে না এগুলো থেকে সম্ভব fast মডেল, যেহেতু তারা 8-বিট পূর্ণসংখ্যা।
  • এই সংগ্রহস্থলে মডেলগুলি ব্যবহার করার সময়, শুধুমাত্র নতুন LSTM-ভিত্তিক OCR ইঞ্জিন সমর্থিত। উত্তরাধিকার tesseract ইঞ্জিন এই ফাইলগুলির সাথে সমর্থিত নয়, তাই Tesseract এর oem মোড '0' এবং '2' তাদের সাথে কাজ করবে না।

ব্যবহার করা tessdata_fast পরিবর্তে মডেল tessdata, আপনাকে যা করতে হবে তা হল আপনার ডাউনলোড করুন tessdata_fast ভাষা ডেটা ফাইল থেকে এখানে এবং এটি আপনার ভিতরে রাখুন $TESSDATA_PREFIX ডিরেক্টরি.


নথি, রসিদ বা চালান ডিজিটাইজ করতে হবে কিন্তু কোড করতে খুব অলস? মাথা ওভার ন্যানোনেটস এবং বিনামূল্যে ওসিআর মডেলগুলি তৈরি করুন!


কাস্টম ডেটাতে টেসার্যাক্ট প্রশিক্ষণ

Tesseract 4.00-এ একটি নতুন নিউরাল নেটওয়ার্ক-ভিত্তিক স্বীকৃতি ইঞ্জিন রয়েছে যা নথির চিত্রগুলিতে উল্লেখযোগ্যভাবে উচ্চতর নির্ভুলতা প্রদান করে। নিউরাল নেটওয়ার্কগুলির জন্য উল্লেখযোগ্যভাবে বেশি প্রশিক্ষণ ডেটা প্রয়োজন এবং বেস টেসার্যাক্টের তুলনায় অনেক ধীর প্রশিক্ষন। ল্যাটিন-ভিত্তিক ভাষার জন্য, প্রদত্ত বিদ্যমান মডেল ডেটা প্রায় 400000 ফন্টে বিস্তৃত প্রায় 4500 পাঠ্য লাইনে প্রশিক্ষণ দেওয়া হয়েছে।

Tesseract 4.0 LSTM প্রশিক্ষণ টিউটোরিয়ালটি সফলভাবে চালানোর জন্য, আপনার কাছে Tesseract 4 এবং Tesseract 4 প্রশিক্ষণ সরঞ্জামগুলির একটি কার্যকরী ইনস্টলেশন থাকতে হবে এবং নির্দিষ্ট ডিরেক্টরিগুলিতে প্রশিক্ষণ স্ক্রিপ্ট এবং প্রয়োজনীয় প্রশিক্ষিত ডেটা ফাইল থাকতে হবে। ভিজিট করুন গিথুব রেপো ফাইল এবং সরঞ্জামের জন্য।

Tesseract 4.00 স্ক্র্যাচ থেকে প্রশিক্ষণের জন্য কয়েক দিন থেকে কয়েক সপ্তাহ সময় নেয়। এমনকি এই সমস্ত নতুন প্রশিক্ষণ ডেটা সহ, তাই এখানে প্রশিক্ষণের জন্য কয়েকটি বিকল্প রয়েছে:

  • চমৎকার সুর - একটি বিদ্যমান প্রশিক্ষিত ভাষা দিয়ে শুরু করে, আপনার নির্দিষ্ট অতিরিক্ত ডেটাতে প্রশিক্ষণ দিন। উদাহরণস্বরূপ একটি হাতে লেখা ডেটাসেট এবং কিছু অতিরিক্ত ফন্টের প্রশিক্ষণ।
  • উপরের স্তরটি কেটে ফেলুন - নেটওয়ার্ক থেকে এবং নতুন ডেটা ব্যবহার করে একটি নতুন শীর্ষ স্তরকে পুনরায় প্রশিক্ষণ দিন। যদি ফাইন-টিউনিং কাজ না করে, এটি সম্ভবত পরবর্তী সেরা বিকল্প। উপমা কেন এটি দরকারী, ইমেজনেট ডেটাসেটে প্রশিক্ষিত মডেলের উদাহরণ নিন। লক্ষ্য হল একটি বিড়াল বা কুকুরের শ্রেণীবিভাগ তৈরি করা, মডেলের নীচের স্তরগুলি কোণ, অনুভূমিক এবং উল্লম্ব রেখা হিসাবে নিম্ন-স্তরের বিমূর্ততায় ভাল, কিন্তু মডেলের উচ্চ স্তরগুলি সেই বৈশিষ্ট্যগুলিকে একত্রিত করছে এবং বিড়াল বা কুকুরের কান, চোখ, নাক সনাক্ত করছে। এবং তাই শুধুমাত্র উপরের স্তরগুলিকে পুনরায় প্রশিক্ষণ দিয়ে আপনি নীচের স্তরগুলির জ্ঞান ব্যবহার করছেন এবং আপনার নতুন ভিন্ন ডেটাসেটের সাথে একত্রিত করছেন৷
  • স্ক্র্যাচ থেকে পুনরায় প্রশিক্ষণ - এটি একটি খুব ধীর পদ্ধতি যদি না আপনার সমস্যাটির জন্য আপনার কাছে খুব প্রতিনিধিত্বশীল এবং যথেষ্ট বড় প্রশিক্ষণ সেট না থাকে। স্ক্র্যাচ থেকে প্রশিক্ষণের জন্য সেরা সম্পদ এটি অনুসরণ করা হয় গিথুব রেপো.

কীভাবে আপনার কাস্টম ডেটা এবং তৈরি করতে প্রশিক্ষণ দেওয়া যায় তার একটি নির্দেশিকা .traineddata ফাইল পাওয়া যাবে এখানে, এখানে এবং এখানে.

আমরা এই ব্লগ পোস্টে Tesseract ব্যবহার করে প্রশিক্ষণের জন্য কোড কভার করব না।

Tesseract এর সীমাবদ্ধতা

পটভূমি থেকে ফোরগ্রাউন্ড পাঠ্যের একটি পরিষ্কার বিভাজন থাকলে Tesseract সবচেয়ে ভাল কাজ করে। অনুশীলনে, এই ধরণের সেটআপের গ্যারান্টি দেওয়া অত্যন্ত চ্যালেঞ্জিং হতে পারে। আপনি Tesseract থেকে ভাল মানের আউটপুট নাও পেতে পারেন এমন বিভিন্ন কারণ রয়েছে যেমন চিত্রটির ব্যাকগ্রাউন্ডে শব্দ থাকলে। ছবির গুণমান (আকার, বৈসাদৃশ্য, বজ্রপাত) যত ভালো হবে স্বীকৃতির ফলাফল তত ভালো। OCR ফলাফলগুলি উন্নত করতে এটির জন্য কিছুটা প্রিপ্রসেসিং প্রয়োজন, ছবিগুলিকে যথাযথভাবে স্কেল করা দরকার, যতটা সম্ভব চিত্রের বৈসাদৃশ্য থাকতে হবে এবং পাঠ্যটি অবশ্যই অনুভূমিকভাবে সারিবদ্ধ হতে হবে। Tesseract OCR বেশ শক্তিশালী কিন্তু নিম্নলিখিত সীমাবদ্ধতা আছে।

Tesseract সীমাবদ্ধতা তালিকায় সংকলিত.

  • OCR আমাদের কাছে উপলব্ধ কিছু বাণিজ্যিক সমাধানের মতো সঠিক নয়।
  • আংশিক অবরোধ, বিকৃত দৃষ্টিকোণ এবং জটিল পটভূমি সহ শিল্পকর্ম দ্বারা প্রভাবিত চিত্রগুলির সাথে ভাল কাজ করে না।
  • এটি হাতের লেখা চিনতে সক্ষম নয়।
  • এটি বিভ্রান্তিকর খুঁজে পেতে পারে এবং এটি OCR আউটপুট হিসাবে রিপোর্ট করতে পারে।
  • যদি একটি নথিতে -l LANG আর্গুমেন্টে দেওয়া ভাষাগুলির বাইরের ভাষা থাকে, তাহলে ফলাফল খারাপ হতে পারে।
  • নথির স্বাভাবিক পড়ার ক্রম বিশ্লেষণ করা সবসময় ভালো নয়। উদাহরণস্বরূপ, এটি সনাক্ত করতে ব্যর্থ হতে পারে যে একটি নথিতে দুটি কলাম রয়েছে এবং কলাম জুড়ে পাঠ্য যোগ করার চেষ্টা করতে পারে।
  • নিম্নমানের স্ক্যানগুলি নিম্নমানের ওসিআর তৈরি করতে পারে।
  • এটি কোন ফন্ট ফ্যামিলি টেক্সট সম্পর্কিত তথ্য প্রকাশ করে না।

OCR কাজগুলি সম্পাদন করার জন্য অবশ্যই একটি ভাল, অনেক সহজ এবং আরও স্বজ্ঞাত উপায় রয়েছে৷


ন্যানোনেটস সহ ওসিআর

সার্জারির Nanonets OCR এপিআই আপনাকে সহজে OCR মডেল তৈরি করতে দেয়। আপনার ছবিগুলিকে প্রি-প্রসেস করার বা আপনার ওসিআর মডেলের নির্ভুলতা বাড়ানোর জন্য টেমপ্লেট মেলানো বা নিয়ম ভিত্তিক ইঞ্জিন তৈরি করার বিষয়ে চিন্তা করতে হবে না।

আপনি আপনার ডেটা আপলোড করতে পারেন, এটি টীকা করতে পারেন, মডেলটিকে প্রশিক্ষণের জন্য সেট করতে পারেন এবং কোডের একক লাইন না লিখে, GPU গুলি নিয়ে চিন্তা না করে বা আপনার গভীর শিক্ষার মডেলগুলির জন্য সঠিক আর্কিটেকচারগুলি খুঁজে না পেয়ে একটি ব্রাউজার ভিত্তিক UI এর মাধ্যমে ভবিষ্যদ্বাণী পাওয়ার জন্য অপেক্ষা করতে পারেন৷ এছাড়াও আপনি প্রতিটি ভবিষ্যদ্বাণীর JSON প্রতিক্রিয়াগুলি আপনার নিজস্ব সিস্টেমের সাথে একীভূত করতে এবং অত্যাধুনিক অ্যালগরিদম এবং একটি শক্তিশালী অবকাঠামোর উপর নির্মিত মেশিন লার্নিং চালিত অ্যাপ তৈরি করতে পারেন।

জিইউআই ব্যবহার করে: https://app.nanonets.com/

আপনি নীচের পদক্ষেপগুলি অনুসরণ করে ন্যানোনেটস-ওসিআর এপিআইও ব্যবহার করতে পারেন: ‍

পদক্ষেপ 1: রেপো ক্লোন করুন, নির্ভরতা ইনস্টল করুন

git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm

পদক্ষেপ 2: আপনার ফ্রি এপিআই কী পান
এ থেকে আপনার ফ্রি এপিআই কী পান https://app.nanonets.com/#/keys

সংখ্যা-প্লেট-সনাক্তকরণ-জিআইএফ

পদক্ষেপ 3: পরিবেশ পরিবর্তনশীল হিসাবে এপিআই কী সেট করুন

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

পদক্ষেপ 4: একটি নতুন মডেল তৈরি করুন

python ./code/create-model.py

বিঃদ্রঃ: এটি পরবর্তী পদক্ষেপের জন্য আপনার প্রয়োজন এমন একটি মডেল_আইডি উত্পন্ন করে

পদক্ষেপ 5: পরিবেশ পরিবর্তনশীল হিসাবে মডেল আইডি যুক্ত করুন

export NANONETS_MODEL_ID=YOUR_MODEL_ID

বিঃদ্রঃ: আপনি আগের পদক্ষেপটি থেকে YOUR_MODEL_ID পাবেন

পদক্ষেপ:: প্রশিক্ষণ ডেটা আপলোড করুন
প্রশিক্ষণ তথ্য পাওয়া যায় images (চিত্র ফাইল) এবং annotations (চিত্র ফাইলগুলির জন্য টিকা)

python ./code/upload-training.py

পদক্ষেপ 7: ট্রেনের মডেল
ছবিগুলি আপলোড হয়ে গেলে মডেলটিকে প্রশিক্ষণ দিতে শুরু করুন

python ./code/train-model.py

পদক্ষেপ 8: মডেল স্টেট পান
মডেলটি প্রশিক্ষণ নিতে 2 ঘন্টা সময় নেয়। মডেলটি প্রশিক্ষিত হয়ে গেলে আপনি একটি ইমেল পাবেন। ইতিমধ্যে আপনি মডেলটির অবস্থাটি পরীক্ষা করে দেখুন

python ./code/model-state.py

পদক্ষেপ 9: ভবিষ্যদ্বাণী করুন
একবার মডেল প্রশিক্ষিত হয়। আপনি মডেলটি ব্যবহার করে ভবিষ্যদ্বাণী করতে পারেন

python ./code/prediction.py ./images/151.jpg

ন্যানোনেট এবং মানুষ লুপে

ঃ 'সংযত' স্ক্রিনটি সংশোধন এবং প্রবেশের প্রক্রিয়াগুলিকে সহায়তা করে এবং ম্যানুয়াল পর্যালোচনাকারীর কাজের চাপকে প্রায় 90% হ্রাস করে এবং সংস্থার জন্য ব্যয় 50% কমিয়ে দেয়।

বৈশিষ্ট্য অন্তর্ভুক্ত

  1. ভবিষ্যদ্বাণীগুলি সঠিক যা ট্র্যাক করুন
  2. কোনটি ভুল তা ট্র্যাক করুন
  3. ভুলগুলি সংশোধন করুন
  4. ভুলগুলি মুছুন
  5. অনুপস্থিত ভবিষ্যদ্বাণীগুলি পূরণ করুন
  6. তারিখের সীমা সহ চিত্রগুলি ফিল্টার করুন
  7. সংযত নয় এমনগুলির বিরুদ্ধে সংযত চিত্রগুলির সংখ্যা পান

সমস্ত ক্ষেত্রগুলিকে জিইউআই ব্যবহারের জন্য সহজভাবে কাঠামোযুক্ত করা হয়েছে যা ব্যবহারকারীকে কোনও কোড টাইপ না করে বা প্রযুক্তি কীভাবে কাজ করে তা বুঝতে না পেরে ওসিআর প্রযুক্তির সুবিধা নিতে এবং এটি যাওয়ার সাথে সাথে আরও ভাল করে তুলতে সহায়তা করে।


মনে মনে ওসিআর সমস্যা আছে? আপনার প্রতিষ্ঠানের ডেটা এন্ট্রি ব্যয় হ্রাস করতে চান? যাও মাথা ন্যানোনেটস এবং OCR মডেল তৈরি করুন ছবি থেকে পাঠ্য নিষ্কাশন or পিডিএফ থেকে ডেটা বের করুন!


উপসংহার

গভীর শিক্ষা যেমন কম্পিউটারের দৃষ্টিভঙ্গির প্রায় প্রতিটি ক্ষেত্রেই প্রভাব ফেলেছে, তেমনই চরিত্রের স্বীকৃতি এবং হাতের লেখার স্বীকৃতির ক্ষেত্রেও এটি সত্য। গভীর শিক্ষা ভিত্তিক মডেলগুলি অভূতপূর্ব টেক্সট স্বীকৃতির নির্ভুলতা অর্জন করতে সক্ষম হয়েছে, প্রথাগত ছাড়িয়ে গেছে তথ্য নিষ্কাশন এবং মেশিন লার্নিং ইমেজ প্রসেসিং পন্থা।

নথির চিত্রগুলি নিম্নলিখিত নির্দেশিকাগুলি অনুসরণ করলে Tesseract ভাল কাজ করে:

  • পটভূমি থেকে ফোরগ্রাউন্ড পাঠ্যের পরিচ্ছন্ন বিভাজন
  • অনুভূমিকভাবে সারিবদ্ধ এবং যথাযথভাবে স্কেল করা হয়েছে
  • অস্পষ্টতা এবং গোলমাল ছাড়াই উচ্চ মানের চিত্র

Tesseract 4.0 এর সর্বশেষ রিলিজ গভীর শিক্ষা ভিত্তিক OCR সমর্থন করে যা উল্লেখযোগ্যভাবে আরো সঠিক। ওসিআর ইঞ্জিন নিজেই একটি লং শর্ট-টার্ম মেমরি (এলএসটিএম) নেটওয়ার্কে তৈরি করা হয়েছে, এক ধরনের রিকারেন্ট নিউরাল নেটওয়ার্ক (আরএনএন)।

Tesseract পরিষ্কার নথি স্ক্যান করার জন্য নিখুঁত এবং এটি বেশ উচ্চ নির্ভুলতা এবং ফন্ট পরিবর্তনশীলতার সাথে আসে যেহেতু এর প্রশিক্ষণ ব্যাপক ছিল। আমি বলব যে Tesseract একটি গো-টু টুল যদি আপনার কাজটি একটি পরিষ্কার সাদা পটভূমিতে বই, নথি এবং মুদ্রিত পাঠ্য স্ক্যান করা হয়।


আরও পড়া

আপডেট:
অনেক লোক আমাদের জিজ্ঞাসা করেছিল যে তারা কীভাবে পাঠ্য আকারে তারিখ পেতে পারে বা যখন এটি তারিখ বা অন্য কোনও নির্দিষ্ট ডেটা সনাক্ত করে তখন তারা তালিকায় যুক্ত করতে পারে।
এখানে উত্তর:
তারিখ বাক্সের চারপাশে একটি বাউন্ডিং বাক্স আঁকতে কোডে, আপনি একটি লাইন লক্ষ্য করবেন যা রেজেক্স প্যাটার্নের সাথে মেলে d['text']. প্যাটার্ন মেলে তবেই এটি একটি বাক্স আঁকে। আপনি সহজভাবে থেকে মান নিষ্কাশন করতে পারে d['text'] একবার প্যাটার্ন মেলে এবং তাদের একটি তালিকায় যুক্ত করুন।

2 আপডেট করুন:
নন-ইংরেজি OCR সম্পর্কিত প্রশ্নগুলির সমাধান করার জন্য, আমরা আরও পড়ার তালিকা আপডেট করেছি।

স্পট_আইএমজি

সর্বশেষ বুদ্ধিমত্তা

স্পট_আইএমজি

আমাদের সাথে খোস গল্প কর

হাই সেখানে! আপনাকে কিভাবে সাহায্য করতে পারি?