পিডিএফের কি ওসিআর প্রয়োজন? সম্পূর্ণ পুনঃস্বীকৃতির পরিবর্তে পৃষ্ঠা-দ্বারা-পৃষ্ঠা প্রিফ্লাইট করতে PyMuPDF ব্যবহার করুন
আপনি যদি পিডিএফটি ওসিআর করতে চান তবে সম্পূর্ণ পিডিএফটি পুনরায় চিনতে হবে না। একটি টেক্সট স্তর আছে কিনা এবং এটি একটি পূর্ণ-পৃষ্ঠা চিত্র কিনা তা নির্ধারণ করতে পৃষ্ঠা অনুসারে পৃষ্ঠা নির্ধারণ করতে PyMuPDF ব্যবহার করুন এবং শুধুমাত্র সেই পৃষ্ঠাগুলি পাঠান যা সত্যই স্বীকৃতির জন্য প্রয়োজনীয়। সংযুক্ত করা হয়েছে চালানোযোগ্য নমুনা, ঘূর্ণায়মান পৃষ্ঠা পরীক্ষা এবং শাখার সীমানা নির্দেশাবলী।
যখন অনেক দল পিডিএফ অনুবাদ বা সংরক্ষণাগার নিয়ে কাজ করছে, তখন তারা প্রবেশদ্বারে "স্ক্যান করা" বা "কপিযোগ্য" হিসাবে পুরো নথিটিকে লেবেল করতে অভ্যস্ত। একটি 300-পৃষ্ঠার পিডিএফ-এর প্রথম 280টি টেক্সট স্তর সহ পৃষ্ঠা থাকতে পারে এবং শুধুমাত্র শেষ 20টি পৃষ্ঠা স্ক্যান করা সংযুক্তি হিসাবে থাকতে পারে। সম্পূর্ণ অংশ দ্বারা শ্রেণীবদ্ধ করা হলে, সম্পূর্ণ OCR অপেক্ষার সময় বাড়িয়ে দেবে, এবং আসল সঠিক সংখ্যাগুলিকেও ভুলভাবে চিহ্নিত করতে পারে। অন্যদিকে, আপনি যদি শুধুমাত্র হোম পেজে টেক্সট কপি করতে পারেন এবং সব পেজে ওসিআর এড়িয়ে যেতে পারেন, তাও ঝুঁকিপূর্ণ।
একটি আরও নির্ভরযোগ্য পদ্ধতি হল প্রতিটি পৃষ্ঠাকে প্রিফ্লাইটের ফলাফল সহ পরবর্তী ধাপে যেতে দেওয়া। এই নিবন্ধটি একটি রক্ষণশীল ত্রিমুখী বিভাজন প্রয়োগ করে: সরাসরি নিষ্কাশন, OCR প্রার্থীর সারিতে পাঠানো এবং ম্যানুয়াল পরিদর্শন। এটি একটি ব্যাখ্যাযোগ্য প্রকৌশল হিউরিস্টিক, পাঠ্যের গুণমান বিচার করার জন্য একটি সর্বজনীন শ্রেণিবিন্যাসকারী নয়। পড়ার পরে, আপনি একটি চলমান পৃষ্ঠা-দ্বারা-পৃষ্ঠা প্রিফ্লাইট প্রোগ্রাম, সেইসাথে ডাইভারশন সীমানা এবং সাধারণ ত্রুটি পরিচালনার ধারণা পেতে পারেন।
এক বাক্যে উপসংহার
পিডিএফের জন্য ওসিআর প্রয়োজন কিনা তা বিচার করার দরকার নেই। PyMuPDF ব্যবহার করুন পৃষ্ঠা অনুসারে পৃষ্ঠা প্রি-চেক করতে এবং শুধুমাত্র সেই পৃষ্ঠাগুলি পাঠান যেগুলি সত্যিই OCR-তে স্বীকৃত হওয়া দরকার।
| আপনার অবস্থা | প্রস্তাবিত অভ্যাস | কারণ |
|---|---|---|
| একটি একক পৃষ্ঠা থেকে কমপক্ষে 40টি নন-হোয়াইটস্পেস অক্ষর বের করুন | সরাসরি নিষ্কাশন (TEXT_CANDIDATE) | ইতিমধ্যেই যথেষ্ট অক্ষর আছে, কিন্তু এখনও লুকানো খারাপ OCR স্তরগুলির জন্য স্পট চেক করতে হবে |
| 40টিরও কম শব্দ এবং একটি একক চিত্র পৃষ্ঠার অন্তত 70% কভার করে৷ | OCR প্রার্থী সারিতে পাঠান | সম্পূর্ণ-পৃষ্ঠা স্ক্যানগুলি সনাক্তকরণের জন্য উপযুক্ত, তবে বিশুদ্ধ ফটোগুলিও যথেষ্ট। |
| ফাঁকা পৃষ্ঠা, ভেক্টর টাইপ, স্পার্স শিরোনাম, বা জটিল ধাঁধা | ম্যানুয়াল পরিদর্শন (পর্যালোচনা) | এই পরিস্থিতিগুলি নির্ভরযোগ্যভাবে প্রথম দুটি বিভাগে শ্রেণীবদ্ধ করা যাবে না এবং স্বয়ংক্রিয়ভাবে এড়িয়ে যাওয়া বা বাতিল করা যাবে না। |
| একটি 300-পৃষ্ঠার হাইব্রিড নথি | পৃষ্ঠায় প্রিফ্লাইট পৃষ্ঠা, সম্পূর্ণ প্রক্রিয়াকরণ নয় | কয়েকটি স্ক্যান করা সংযুক্তির কারণে সমস্ত পৃষ্ঠাগুলিকে ওসিআর করা এড়িয়ে চলুন বা হোমপেজে পাঠ্য থাকায় সমস্ত ওসিআর এড়িয়ে যান |
দ্রষ্টব্য: ছবির বিষয়বস্তু নীচের কোড দ্বারা তৈরি সংশ্লেষিত PDF থেকে এসেছে, গ্রাহক ফাইল বা OmniDoc ইন্টারফেস থেকে নয়। চিত্র পৃষ্ঠার পাঠ্য রাস্টার পিক্সেল; পাঠ্য পৃষ্ঠার পাঠ্যটিতে একটি বাস্তব পাঠ্য স্তর রয়েছে।
প্রথমে কি পরীক্ষা করবেন তা ঠিক করুন
এখানে দুটি সংকেত ব্যবহার করা হয়েছে: হোয়াইটস্পেস অপসারণের পরে পাঠ্য অক্ষরের সংখ্যা এবং পৃষ্ঠার বৃহত্তম ছবি দ্বারা দখল করা পৃষ্ঠা এলাকার অনুপাত। প্রাক্তন উত্তর "পর্যাপ্ত অক্ষর নিষ্কাশন করা হয়েছে?" এবং পরবর্তীটি একটি সম্পূর্ণ পৃষ্ঠা স্ক্যান এবং একটি ফাঁকা পৃষ্ঠার মধ্যে পার্থক্য করতে সহায়তা করে। চিত্রের এলাকাটি প্রথমে ক্রপিং বাক্সের সাথে ছেদ করবে যাতে পৃষ্ঠায় চিত্র বৃদ্ধির অনুপাত অতিক্রম না হয়।
| পর্যবেক্ষণ | এই নিবন্ধের ডাইভারশন | এখনও মনোযোগ প্রয়োজন |
|---|---|---|
| কমপক্ষে 40টি নন-হোয়াইটস্পেস অক্ষর | TEXT_CANDIDATE | লুকানো খারাপ ওসিআর স্তরটিতেও প্রচুর শব্দ থাকতে পারে |
| 40 শব্দের কম এবং একটি একক চিত্রের কমপক্ষে 70% কভারেজ | OCR_CANDIDATE | বিশুদ্ধ ফটোগুলিও প্রয়োজনীয়তা পূরণ করে; ওসিআর অর্থবহ নাও হতে পারে |
| বাকি অবস্থা | REVIEW | ফাঁকা স্থান, ভেক্টর পাঠ্য, বিরল শিরোনাম এবং জটিল ধাঁধা সবই এখানে থাকতে পারে |
40 এবং 0.70 এর থ্রেশহোল্ডগুলি ক্রস-ল্যাঙ্গুয়েজ স্ট্যান্ডার্ডগুলি নয়, এই পরীক্ষার সেটটি নিরীক্ষা করা সহজ করার উদ্দেশ্যে তৈরি করা হয়েছে। চীনা, সূত্র, কভার এবং সংক্ষিপ্ত ফর্মগুলি আলাদাভাবে লেবেল করা উচিত। এখানে, কেবল ওভারল্যাপিং চিত্রগুলির অঞ্চলগুলি যুক্ত করার পরিবর্তে ক্ষেত্রফল অনুসারে বৃহত্তম চিত্রটি তোলা হয়। অতএব, একাধিক চিত্র নিয়ে গঠিত একটি স্ক্যান করা পৃষ্ঠা পর্যালোচনাতে শেষ হতে পারে। এটি ইচ্ছাকৃতভাবে সংরক্ষিত সীমানা।
সম্পূর্ণ চলনযোগ্য নমুনা
নমুনাটি PyMuPDF==1.28.0 ব্যবহার করে, টেসেরাক্টের উপর নির্ভর করে না এবং কোনও অনলাইন ওসিআর বা অনুবাদ পরিষেবাগুলিতে কল করে না। example.py হিসাবে সংরক্ষণ করুন এবং এটি একটি খালি ডিরেক্টরিতে চালান। এটি যে ফাইলের নামটি তৈরি করে তা routing-fixture.pdf এ স্থির করা হয়েছে। বাস্তব প্রকল্পগুলির জন্য, অনুগ্রহ করে ইনপুট ফাইলগুলি ওভাররাইট করবেন না।
import json
import pymupdf
def inspect_page(page):
chars = len("".join(page.get_text().split()))
bounds = page.cropbox
# 图片坐标与文本坐标都是未旋转坐标;不要混用旋转后的 page.rect。
bounds = pymupdf.Rect(0, 0, bounds.width, bounds.height)
ratios = []
for image in page.get_image_info():
rect = pymupdf.Rect(image["bbox"]) & bounds
ratios.append(max(0, rect.get_area()) / bounds.get_area())
largest = max(ratios, default=0.0)
route = ("TEXT_CANDIDATE" if chars >= 40 else
"OCR_CANDIDATE" if largest >= 0.70 else "REVIEW")
return {"page": page.number + 1, "chars": chars,
"largest_image_ratio": round(largest, 3), "route": route}
with pymupdf.open() as source:
page = source.new_page(width=360, height=480)
page.insert_text((28, 60), "Sample invoice 2026-09-26", fontsize=16)
page.insert_text((28, 100), "Quantity 12 Unit price USD 15.00", fontsize=12)
page.insert_text((28, 132), "Amount USD 180.00 Checked manually", fontsize=12)
scan = page.get_pixmap(matrix=pymupdf.Matrix(2, 2)).tobytes("png")
page = source.new_page(width=360, height=480)
page.insert_image(page.rect, stream=scan)
source.new_page(width=360, height=480)
source.save("routing-fixture.pdf")
with pymupdf.open("routing-fixture.pdf") as pdf:
result = [inspect_page(page) for page in pdf]
assert [r["route"] for r in result] == [
"TEXT_CANDIDATE", "OCR_CANDIDATE", "REVIEW"]
assert result[1]["chars"] == 0
assert result[1]["largest_image_ratio"] == 1.0
pdf[1].set_rotation(90)
assert inspect_page(pdf[1])["route"] == "OCR_CANDIDATE"
print(json.dumps(result, indent=2))
ওসিআর অ্যাক্সেস করার সময়, ক্যাশে টেক্সটপেজ, কোনও সাফল্যের চিহ্নিতকারী নয়
PyMuPDF এর OCR ইন্টারফেস হল page.get_textpage_ocr(...)। টেসার্যাক্ট এবং এর সংশ্লিষ্ট ভাষার তথ্য আলাদাভাবে প্রস্তুত করা দরকার। একটি টেক্সটপেজ পাওয়ার পরে, একই পৃষ্ঠায় সদৃশ স্বীকৃতি এড়াতে পরবর্তী নিষ্কাশনটি একটি textpage প্যারামিটার হিসাবে পাস করা উচিত। নির্দিষ্ট ইনস্টলেশন পদ্ধতি এবং প্যারামিটারগুলির জন্য, দয়া করে PyMuPDF OCR ডকুমেন্ট দেখুন।
এই নিবন্ধটি একটি ওসিআর ইঞ্জিন চালায় না, তাই পরীক্ষার ফলাফলগুলি কেবল প্রমাণ করে যে বিতরণ যুক্তি এবং স্থানাঙ্ক ব্যবহার সঠিক, এবং চীনা স্বীকৃতির হার, টেবিল পুনরুদ্ধারের হার বা অনুবাদের গুণমানের প্রতিনিধিত্ব করে না। উত্পাদনে, ওসিআর ইঞ্জিন সংস্করণ, ভাষা প্যাক, পৃষ্ঠা নম্বর, ইনপুট ফাইল সারাংশ এবং ম্যানুয়াল নমুনা ফলাফল রেকর্ড করা উচিত। কেবল চূড়ান্ত স্ট্রিং রাখবেন না, অন্যথায় কোনও নম্বর কোন পৃষ্ঠা থেকে আসে তা ব্যাখ্যা করা কঠিন।
তিন ধরনের ত্রুটি সবচেয়ে সহজেই উপেক্ষা করা যায়
লুকানো পাঠ্য স্তরগুলি গার্বলড পাঠ্য হতে পারে। অক্ষরের গণনা পূরণ করার অর্থ কেবল "আপনি নিষ্কাশনের চেষ্টা চালিয়ে যেতে পারেন। প্রতিস্থাপিত অক্ষর, সদৃশ লাইন এবং কী ক্ষেত্রগুলি রেন্ডারিংয়ের সাথে সামঞ্জস্যপূর্ণ কিনা তাও আপনাকে পরীক্ষা করতে হবে। চুক্তির নম্বর এবং পরিমাণের মতো মূল আইটেমগুলি অবশ্যই এলোমেলোভাবে পরিদর্শন করতে হবে।
ভেক্টর পথ দ্বারা আঁকা পাঠ্যটি পাঠ্য বা চিত্র নয়। তারা রিভিউতে প্রবেশ করবে। স্বয়ংক্রিয়ভাবে পৃষ্ঠাগুলিকে ফাঁকা হিসাবে চিহ্নিত করবেন না এবং নীরবে পৃষ্ঠাগুলি বাদ দেবেন না।
ডকুমেন্ট বন্ধ করার পরে পৃষ্ঠা ব্যবহার করার ফলে একটি অবৈধ বস্তু তৈরি হবে। দয়া করে with pymupdf.open(...) এর সুযোগটি রাখুন এবং এটি প্রিচেক, রেন্ডারিং এবং এক্সট্রাক্ট করার পরে কেবল ফাইলটি প্রকাশ করুন। স্থানাঙ্ক, চিত্রের তথ্য এবং পৃষ্ঠার জীবনচক্র সম্পর্কে আরও তথ্যের জন্য, PyMuPDF Page API দেখুন।
অবিশ্বস্ত পিডিএফগুলির একটি স্বতন্ত্র প্রক্রিয়ায় ফাইলের আকার, পৃষ্ঠা গণনা, রেন্ডার পিক্সেল, সময় এবং মেমরি সীমা সেট করা উচিত। উদাহরণটি কেবল ছোট ফাইলগুলি পরীক্ষা করে এবং দূষিত ফাইলগুলির জন্য একটি স্যান্ডবক্স সরবরাহ করে না। PyMuPDF উত্পাদন এবং ব্যবহার করার আগে, আপনার লাইসেন্সিং শর্তাবলী এবং আপনার বিতরণ পদ্ধতি যাচাই করা উচিত।
স্ট্রিম থেকে ট্রান্সলেশন ওয়ার্কফ্লোতে ট্রানজিশন
একটি যোগ্য আউটপুট পাঠ্যের স্ট্রিং নয়, তবে পৃষ্ঠা নম্বর এবং সিদ্ধান্তের কারণগুলির সাথে একটি রেকর্ড। অনুবাদ করার আগে, কোন পৃষ্ঠাগুলি নির্ভরযোগ্যভাবে নিষ্কাশন করা যেতে পারে তা নিশ্চিত করুন; অনুবাদের পরে, সামগ্রী, সংখ্যা এবং বিন্যাস পর্যালোচনা করা হয়। তুমি OmniDoc প্রোডাক্ট এন্ট্রি এ ডকুমেন্ট প্রসেসিং পরিষেবাগুলি দেখতে পারো। এই নিবন্ধের স্থানীয় প্রোগ্রামটি স্বাধীনভাবে চালিত হয় এবং কোনও ওমনিডক অ্যাকাউন্টের উপর নির্ভর করে না, বা এর অর্থ এই নয় যে এটি একটি অভ্যন্তরীণ পণ্য অ্যালগরিদম।
📊 মূল তুলনা
| রুট | ট্রিগার শর্ত | উপযুক্ত পাতা | বড় ঝুঁকি |
|---|---|---|---|
| সরাসরি নিষ্কাশন (TEXT_CANDIDATE) | কমপক্ষে 40 টি অ-ব্যবধানযুক্ত অক্ষর | বিদ্যমান পাঠ্য স্তরের বডি পৃষ্ঠা | লুকানো খারাপ ওসিআর স্তরগুলিতে গার্বলড পাঠ্য থাকতে পারে |
| ওসিআর প্রার্থী (OCR_CANDIDATE) | 40 শব্দেরও কম, একটি একক চিত্র সহ কমপক্ষে 70% কভার করে | পূর্ণ পৃষ্ঠা স্ক্যান করা অনুলিপি | বিশুদ্ধ ফটোগুলিও প্রয়োজনীয়তাগুলি পূরণ করে, তবে ওসিআর ফলাফলগুলি অর্থবহ নাও হতে পারে |
| ম্যানুয়াল পরিদর্শন (পর্যালোচনা) | এটি উপরের দুটি বিভাগ পূরণ করে না | ফাঁকা পৃষ্ঠা, ভেক্টর পাঠ্য, বিরল শিরোনাম, জটিল ধাঁধা | ম্যানুয়াল রায় প্রয়োজন; স্কিপিং বা পরিত্যাগ স্বয়ংক্রিয়ভাবে করা যাবে না |
🎯 কোন পদ্ধতিটি আপনার জন্য উপযুক্ত?
আপনি যদি ...... করেন
- সামনের এবং পিছনের পৃষ্ঠাগুলির মধ্যে বড় মানের পার্থক্য সহ মিশ্র নথিগুলি পরিচালনা করা হয়: পৃষ্ঠা থেকে পৃষ্ঠা প্রাক-পরীক্ষা, প্রতিটি আলাদা রুটে প্রবেশ করে।
- প্রধানত চুক্তি, আর্থিক নথি এবং মূল নম্বরযুক্ত অন্যান্য নথিগুলি পরিচালনা করুন: পৃষ্ঠা TEXT_CANDIDATE এর জন্য, এলোমেলোভাবে নম্বর এবং রেন্ডারিংয়ের মধ্যে চিঠিপত্র পরীক্ষা করুন।
- স্ক্যানগুলির ব্যাচ প্রসেসিং: সহজ ট্রেসযোগ্যতার জন্য ওসিআর ফলাফলের জন্য ইঞ্জিন সংস্করণ, ভাষা প্যাক এবং পৃষ্ঠা নম্বরগুলি রেকর্ড করুন।
- অজানা উৎস থেকে পিডিএফ প্রাপ্তি: স্বতন্ত্র প্রক্রিয়াগুলিতে সম্পদের সীমা নির্ধারণ করুন; মূল প্রক্রিয়ায় তাদের সরাসরি প্রক্রিয়া করবেন না।
❓ প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ)
1. হোমপেজটি পাঠ্য অনুলিপি করতে পারে; আমি কি পুরো পিডিএফের জন্য ওসিআর প্রক্রিয়াটি এড়িয়ে যেতে পারি?
না, তুমি পারবে না। প্রথম পৃষ্ঠায় একটি পাঠ্য স্তর থাকার অর্থ এই নয় যে পরবর্তী পৃষ্ঠাগুলিতেও সেগুলি রয়েছে; আপনার পৃষ্ঠা দ্বারা পৃষ্ঠা বিচার করা উচিত।
2. কেন কেবল চিত্রের অঞ্চলটি সরাসরি যুক্ত করবেন না?
এলাকা অনুসারে ওভারল্যাপিং চিত্রগুলি যুক্ত করা কভারেজের হারকে অতিরিক্ত মূল্যায়ন করবে। এই নিবন্ধটি ক্ষেত্রফল অনুসারে বৃহত্তম চিত্র নেয়, তাই একাধিক চিত্র থেকে একসাথে সেলাই করা স্ক্যান করা পৃষ্ঠাগুলি পর্যালোচনা বিভাগে পড়তে পারে, যা একটি ইচ্ছাকৃত সীমানা।
3. যদি অক্ষরের সংখ্যা 40 এ পৌঁছায়, তবে এর অর্থ কি পাঠ্যের গুণমান ঠিক আছে?
এটি এভাবে উপসংহার করা যায় না। লুকানো খারাপ ওসিআর স্তরগুলিতে অনেকগুলি অক্ষর থাকতে পারে, তাই আপনাকে এখনও প্রতিস্থাপন অক্ষর, সদৃশ লাইন এবং স্পট কী ক্ষেত্রগুলি পরীক্ষা করতে হবে।
4. ভেক্টর পাথগুলিতে আঁকা পাঠ্য কীভাবে পরিচালনা করা উচিত?
এগুলি পাঠ্য বা চিত্র নয়, পর্যালোচনা প্রবেশ করুন এবং ম্যানুয়ালি বিচার করা হয়; এগুলি স্বয়ংক্রিয়ভাবে ফাঁকা বা নীরবে ফেলে দেওয়া পৃষ্ঠা হিসাবে চিহ্নিত করা উচিত নয়।
5. স্থানীয় প্রোগ্রামটি কি OmniDoc অ্যাকাউন্টের উপর নির্ভর করে?
নির্ভরশীল নয়। এই নিবন্ধের স্থানীয় প্রোগ্রামটি স্বাধীনভাবে চালিত হয় এবং কোনও অনলাইন ওসিআর বা অনুবাদ পরিষেবাদিকে কল করে না।
📝 সারসংক্ষেপ
প্রথমত, ওসিআর পরিচালনা করবেন কিনা তা সিদ্ধান্ত নেওয়ার আগে পৃষ্ঠায় পৃষ্ঠায় প্রমাণ ছেড়ে দিন। অনিশ্চিত ফলাফলকে সাফল্য হিসাবে ছদ্মবেশ ধারণ করার চেয়ে লাইনে অনিশ্চিত পৃষ্ঠাগুলি রেখে যাওয়া আরও কার্যকর।
এখনই অভিজ্ঞতা: অনুবাদ শুরু করতে আপনার নথি আপলোড করুন, মূল ফর্ম্যাটিং সংরক্ষণ করুন


