การสร้างบาร์โค้ด PDF417 ใช้เพียงสี่บรรทัดของ Python การอ่านบาร์โค้ดจากรูปถ่ายบนโทรศัพท์, การสแกน 200 DPI, หรือบัตรขึ้นเครื่องที่อยู่ในกระเป๋าของใครสักคนเป็นเวลาหนึ่งวัน คือจุดเริ่มต้นของงานจริงและเป็นจุดที่การบูรณาการ PDF417 ส่วนใหญ่ล้มเหลว ในบทความนี้คุณจะได้เรียนรู้วิธีอ่านบาร์โค้ด PDF417 ด้วย Python เมื่อภาพต้นทางไม่สมบูรณ์ หากคุณกำลังมองหาด้านการสร้างบาร์โค้ดแทน ให้ดูบทแนะนำก่อนหน้าที่อธิบายวิธี generate PDF417 barcodes using Python ซึ่งครอบคลุมการสร้างสัญลักษณ์ PDF417 พื้นฐานและแบบกำหนดเอง รวมถึงการควบคุมแถวและคอลัมน์ และ Python barcode reader guide ที่ครอบคลุมการสแกนทั่วไปในหลายสัญลักษณ์ สิ่งต่อไปนี้จะเจาะลึกและแคบลงในเรื่องการจดจำ PDF417
โค้ดตัวอย่างทั้งหมดด้านล่างนี้ถูกเรียกใช้กับ Aspose.BarCode for Python via .NET 26.7 บน Linux พร้อม Python 3.12 เวลาและผลลัพธ์การอ่าน/พลาดถูกวัดจริง ไม่ใช่การประมาณค่า และสคริปต์ที่สร้างผลลัพธ์เหล่านั้นอยู่ที่ส่วนท้ายเพื่อให้คุณสามารถรันใหม่บนภาพของคุณเองได้
สิ่งที่ทำให้การจดจำ PDF417 พังจริงๆ
PDF417 เป็นสัญลักษณ์แบบซ้อนกัน: แถวของ codewords, แต่ละ codeword สร้างจากบาร์สี่แท่งและช่องว่างสี่ช่องที่ครอบคลุม 17 โมดูล. โครงสร้างนั้นใช้การแก้ไขข้อผิดพลาดแบบ Reed‑Solomon, ดังนั้นมุมที่ฉีกหรือคราบกาแฟมักจะยังคงอ่านได้. สิ่งที่ไม่สามารถอยู่รอดได้คือการสูญเสียตารางโมดูลเอง.
สามสิ่งที่ทำลายกริด, ตามลำดับโดยประมาณของความถี่ที่พบในการผลิต:
- ความกว้างโมดูลที่มีประสิทธิภาพต่ำกว่า 2 พิกเซล. นี่คือความล้มเหลือที่สำคัญที่สุด มันเกิดจากการลดขนาด, ระยะห่างของกล้อง, และการเบลอ ซึ่งทำให้หมึกของโมดูลหนึ่งกระจายไปยังโมดูลใกล้เคียง บาร์โค้ดที่สร้างที่สามพิกเซลต่อโมดูลแล้วถูกเบลอ จะทำงานเทียบเท่ากับบาร์โค้ดที่หนึ่งพิกเซลต่อโมดูล
- มุมมองและการหมุน. บาร์โค้ดที่ถ่ายภาพในมุมจะมีแถวที่ไม่เป็นเส้นสแกนที่ขนานกัน ตัวตรวจจับสามารถจัดการได้ แต่จะต้องใช้การสแกนเพิ่มเติมซึ่งการตั้งค่าที่เร็วที่สุดจะข้ามไป
- การล่มของคอนทราสต์. กระดาษความร้อนที่ซีดจาง, หน้าจอที่ถ่ายภาพภายใต้แสงจ้า, หรือการสแกนที่ความสว่างถูกล็อก ผลลัพธ์อาจดูแย่มากแต่จริงๆ แล้วไม่ร้ายแรงเท่าที่คิด ตามที่ตัวเลขด้านล่างแสดง
ผลลัพธ์เชิงปฏิบัติคือการตั้งค่าการจดจำเป็นกลไกการกู้คืน ไม่ใช่การทดแทนคุณภาพการจับภาพ พวกมันช่วยคืนคุณภาพภาพระดับกลางให้คุณ แต่ไม่ได้คืนคุณภาพระดับล่าง
ตั้งค่า Python PDF417 Reader
ติดตั้งไลบรารีจาก PyPI:
pip install aspose-barcode-for-python-via-net
API การจดจำอยู่ใน aspose.barcode.barcoderecognition สองคลาสที่สำคัญสำหรับบทความนี้คือ BarCodeReader ซึ่งทำหน้าที่ตรวจจับและถอดรหัส และ QualitySettings ซึ่งควบคุมความพยายามของตัวอ่าน.
อ่านบาร์โค้ด PDF417 ด้วย Python
การอ่านที่เป็นไปได้ขั้นต่ำคือสองอาร์กิวเมนต์และลูปหนึ่ง:
from aspose.barcode import barcoderecognition as rec
reader = rec.BarCodeReader("clean.png", rec.DecodeType.PDF417)
for result in reader.read_bar_codes():
print("Code text:", result.code_text)
print("Symbology:", result.code_type_name)
print("Reading quality:", result.reading_quality)

อ่านบาร์โค้ด PDF417 ด้วย Python.
ผลลัพธ์บนภาพที่สะอาด:
Code text: PASSENGER|KHAN/M|SEAT14C|LHE-DXB
Symbology: Pdf417
Reading quality: 100.0
อาร์กิวเมนต์ที่สองไม่ได้เป็นตัวเลือกในทางปฏิบัติ. ถ้าไม่ใส่ไว้ BarCodeReader จะย้อนกลับไปใช้ DecodeType.ALL_SUPPORTED_TYPES ซึ่งทำการตรวจจับมากกว่าหกสิบสัญลักษณ์ต่อทุกพื้นที่ที่เป็นไปได้ในภาพ. บนสายงานที่ใช้เฉพาะ PDF417 นั่นเป็นการเสียเปล่าอย่างสิ้นเชิง และอาจทำให้เกิดผลบวกเท็จของสัญลักษณ์เชิงเส้นภายในโครงสร้างแถวของ PDF417. ระบุประเภท.
หากข้อมูลเข้าเข้ามาเป็นไบต์จากการอัปโหลดแทนที่จะเป็นไฟล์บนดิสก์ ให้ส่งสตรีมและตั้งค่า timeout เพื่อป้องกันไม่ให้ภาพที่ผิดปกติทำให้ worker หยุดทำงานได้
import io
from aspose.barcode import barcoderecognition as rec
def decode_pdf417(image_bytes, timeout_ms=2000):
reader = rec.BarCodeReader(io.BytesIO(image_bytes), rec.DecodeType.PDF417)
reader.timeout = timeout_ms
return [r.code_text for r in reader.read_bar_codes()]
เปรียบเทียบการตั้งค่าคุณภาพการจดจำ PDF417 ใน Python
QualitySettings มีชุดค่าพรีเซ็ตสี่ชุดที่ควรรู้จัก การกำหนดค่าให้กับตัวอ่านเป็นเพียงบรรทัดเดียว:
reader = rec.BarCodeReader("scan.png", rec.DecodeType.PDF417)
reader.quality_settings = rec.QualitySettings.high_quality
| พรีเซ็ต | ใช้สำหรับ | ค่าใช้จ่าย |
|---|---|---|
high_performance | ภาพที่สะอาดและสร้างโดยเครื่อง | เร็วที่สุด, ข้ามขั้นตอนการกู้คืน |
normal_quality | ค่าเริ่มต้น. การสแกนและส่งออกปกติ | สมดุล |
high_quality | ภาพจากกล้อง, การสแกนที่เสื่อมคุณภาพ | ปานกลาง |
max_quality | ทำการลองใหม่บนภาพที่ล้มเหลวแล้ว | ช้าที่สุดโดยห่างไกล |
เพื่อค้นหาว่าคำอธิบายเหล่านั้นหมายความอย่างไรในทางปฏิบัติ ฉันได้สร้าง PDF417 ที่สามพิกเซลต่อโมดูล ทำให้คุณภาพลดลงหกวิธีด้วย Pillow และรันทุกพรีเซ็ตกับทุกเวอร์ชัน ค่าเฉลี่ยของการรันสามครั้ง:
| ภาพต้นฉบับ | high_performance | normal_quality | high_quality | max_quality |
|---|---|---|---|---|
| สะอาด | อ่าน, 35 ms | อ่าน, 50 ms | อ่าน, 45 ms | อ่าน, 106 ms |
| หมุน 12°, เบลอ | พลาด, 15 ms | อ่าน, 74 ms | อ่าน, 67 ms | อ่าน, 157 ms |
| สัญญาณรบกวนแบบกอซเซียน (σ 40) | อ่าน, 31 ms | อ่าน, 49 ms | อ่าน, 52 ms | อ่าน, 123 ms |
| ความละเอียดครึ่งหนึ่ง | อ่าน, 22 ms | อ่าน, 37 ms | อ่าน, 35 ms | อ่าน, 86 ms |
| คอนทราสต์ต่ำ | อ่าน, 24 ms | อ่าน, 38 ms | อ่าน, 43 ms | อ่าน, 112 ms |
| เบลอหนัก (σ 2.2) | พลาด, 5 ms | พลาด, 25 ms | พลาด, 85 ms | พลาด, 180 ms |
สี่สิ่งที่สรุปจากตารางนี้และมีประโยชน์มากกว่าตัวเลขแต่ละตัว:
- สัญญาณรบกวนและคอนทราสต์ต่ำไม่ได้เป็นปัญหาตามที่คนคิด Reed‑Solomon พร้อมกับตัวตรวจจับได้ดูดซับสัญญาณรบกวนแบบเกาส์เชียนหนักและการลดคอนทราสต์ 82% ในพรีเซ็ตที่เร็วที่สุด. หยุดปรับแต่งสำหรับสิ่งเหล่านี้.
- การหมุนพร้อมกับการเบลอเป็นกรณีที่แยกพรีเซ็ตออกจากกัน นอกจากนี้ยังเป็นโปรไฟล์ที่ตรงกับการจับภาพด้วยโทรศัพท์มือถือ, ซึ่งเป็นเหตุผลที่
high_performanceไม่ใช่ค่าเริ่มต้นที่ถูกต้องสำหรับ pipeline ที่มาจากมือถือใด ๆ. max_qualityใช้เวลาสามเท่าของnormal_qualityแต่ไม่ได้ให้ข้อมูลเพิ่มเติม มันได้ตำแหน่งเป็นเส้นทางลองครั้งที่สอง ไม่ใช่ค่าเริ่มต้น.- เมื่อกริดโมดูลหายไป ไม่มีพรีเซ็ตใดสามารถกู้คืนได้ แถวที่มีการเบลอหนักเป็นความล้มเหลวทั่วทั้งระบบ, และ
max_qualityใช้เวลา 180 ms เพื่อพิสูจน์เรื่องนี้. นั่นเป็นปัญหาการจับภาพที่ต้องแก้ด้วยการจับภาพที่ดีขึ้น: พิกเซลมากขึ้น, โฟกัสดีกว่า,x_dimensionที่ใหญ่ขึ้นในช่วงการสร้าง.
ปรับ QualitySettings เพื่ออ่านบาร์โค้ด PDF417 ที่เบลอใน Python
Preset คือชุดของคุณสมบัติเฉพาะแต่ละรายการ และคุณสามารถเริ่มจาก preset แล้วเขียนทับหนึ่งรายการได้ นี่คือจุดที่ได้ประโยชน์จริงสำหรับข้อบกพร่องที่รู้จักและทำซ้ำได้
ภาพที่หมุนและเบลอด้านบนเป็นการสาธิตที่ดี ภายใต้ high_performance มันพลาด ให้เปิดใช้งานการดีคอนโวลูชันบนพรีเซ็ตเดียวกันนั้นและมันจะแสดงว่า:
from aspose.barcode import barcoderecognition as rec
reader = rec.BarCodeReader("rotated.png", rec.DecodeType.PDF417)
quality = rec.QualitySettings.high_performance
quality.deconvolution = rec.DeconvolutionMode.NORMAL
reader.quality_settings = quality
for result in reader.read_bar_codes():
print(result.code_text)

ปรับ QualitySettings เพื่ออ่านบาร์โค้ด PDF417 ที่เบลอใน Python.
วัดได้: พลาดใน 12 ms โดยไม่มีการแทนที่, อ่านใน 54 ms พร้อมกับการแทนที่นั้น. คุณสมบัติหนึ่งทำให้ผลลัพธ์เปลี่ยนแปลง, และผลลัพธ์ยังกลับมารวดเร็วกว่า preset max_quality ที่คาดไว้.
คุณสมบัติที่ควรรู้:
| คุณสมบัติ | ค่า | เมื่อควรใช้ |
|---|---|---|
deconvolution | FAST, NORMAL, SLOW | ภาพเบลอจากการเคลื่อนที่และภาพที่โฟกัสไม่ชัด |
barcode_quality | HIGH, NORMAL, LOW | ข้อบกพร่องการพิมพ์, การซีดจากความร้อน, สิ่งผิดปกติจากแฟกซ์ |
x_dimension | AUTO, SMALL, NORMAL, LARGE, USE_MINIMAL_X_DIMENSION | บาร์โค้ดหนาแน่น หรือขนาดโมดูลที่กำหนดและรู้จัก |
minimal_x_dimension | float | ใช้ร่วมกับ USE_MINIMAL_X_DIMENSION เพื่อกำหนดค่าต่ำสุด |
complex_background | AUTO, DISABLED, ENABLED | บาร์โค้ดที่พิมพ์บนงานศิลปะหรือรูปแบบที่มีลวดลาย |
inverse_image | AUTO, DISABLED, ENABLED | บาร์โค้ดสีขาวบนพื้นดำ, การจับภาพหน้าจอ |
allow_incorrect_barcodes | bool | ใช้เพื่อการวินิจฉัยเท่านั้น, ไม่ควรใช้ในการผลิต |
ข้อสุดท้ายนี้ควรมีคำเตือน allow_incorrect_barcodes คืนสัญลักษณ์ที่ล้มเหลวในการตรวจสอบ checksum. มันเป็นเครื่องมือดีบักเพื่อช่วยตอบว่า “did the detector even find something here?” การส่งออกหมายถึงการส่งสตริงที่ถอดรหัสแล้วแต่ผิดพลาดแทนที่จะไม่มี ซึ่งแย่กว่าการพลาดอย่างชัดเจน.
กลยุทธ์การจัดระดับที่ทำงานได้ดีในสภาพการผลิต: ลอง normal_quality ก่อน และหากไม่สำเร็จให้ลองใหม่อีกครั้งหนึ่งด้วย high_quality พร้อม deconvolution = SLOW. คุณจะจ่ายเส้นทางที่มีค่าใช้จ่ายสูงเฉพาะสำหรับภาพที่ต้องการเท่านั้น.
ตรวจสอบผลการถอดรหัส PDF417 ใน Python
สตริงที่ถอดรหัสแล้วไม่ได้หมายความว่าจะเป็นสตริงที่ถูกต้องโดยอัตโนมัติ ฟิลด์สามอย่างใน BarCodeResult ช่วยได้:
for result in reader.read_bar_codes():
print("Text:", result.code_text)
print("Reading quality:", result.reading_quality)
print("Confidence:", result.confidence)
print("Region:", [(p.x, p.y) for p in result.region.points])
Text: PASSENGER|KHAN/M|SEAT14C|LHE-DXB
Reading quality: 100.0
Confidence: 100
Region: [(7, 6), (261, 7), (261, 276), (7, 277)]
รวม Macro PDF417 ที่แยกเป็นหลายภาพ
Macro PDF417 แบ่งข้อความเชิงตรรกะหนึ่งข้อความออกเป็นหลายสัญลักษณ์ ซึ่งปรากฏในรายการขนส่งและเอกสารหลายหน้า เมตาดาต้าเซกเมนต์ยังคงอยู่หลังการเดินทางไปกลับ ดังนั้นการประกอบใหม่จึงเป็นแบบกำหนดได้:
from aspose.barcode import barcoderecognition as rec
segments = {}
total = None
for path in ["page1.png", "page2.png"]:
reader = rec.BarCodeReader(path, rec.DecodeType.MACRO_PDF417)
for result in reader.read_bar_codes():
meta = result.extended.pdf417
segments[meta.macro_pdf_417_segment_id] = result.code_text
total = meta.macro_pdf_417_segments_count
print(f"{path}: segment {meta.macro_pdf_417_segment_id + 1} of {total}, "
f"file id {meta.macro_pdf_417_file_id}")
if total and len(segments) == total:
payload = "".join(segments[i] for i in sorted(segments))
print("Reassembled:", payload)
else:
print("Incomplete: missing segments")

หน้า 1.

หน้า 2.
Output:
Data\pdf417\page1.png: segment 1 of 2, file id 42
Data\pdf417\page2.png: segment 2 of 2, file id 42
Reassembled: SEGMENT-A-DATASEGMENT-B-DATA
หมายเหตุว่า
macro_pdf_417_file_idเป็นจำนวนเต็ม ไม่ใช่สตริง ทั้งในด้านการสร้างและการจดจำ วัตถุเดียวกันยังเปิดเผยmacro_pdf_417_file_name,macro_pdf_417_sender,macro_pdf_417_addressee,macro_pdf_417_time_stampและmacro_pdf_417_checksumเมื่อเครื่องเข้ารหัสทำการเติมค่าเหล่านั้น
ประเมินประสิทธิภาพการจดจำ PDF417 บนภาพของคุณเอง
การเลือกพรีเซ็ตควรเป็นการวัดผล ไม่ใช่การคาดเดา ให้ชี้ไปที่โฟลเดอร์ที่มีการจับภาพตัวอย่างจาก pipeline จริงของคุณ แล้วมันจะบอกคุณว่าพรีเซ็ตใดคุ้มค่าต่อค่าใช้จ่าย:
import time, statistics, pathlib
from aspose.barcode import barcoderecognition as rec
PRESETS = ["high_performance", "normal_quality", "high_quality", "max_quality"]
def probe(path, preset, reps=3):
times, found = [], False
for _ in range(reps):
reader = rec.BarCodeReader(str(path), rec.DecodeType.PDF417)
reader.quality_settings = getattr(rec.QualitySettings, preset)
start = time.perf_counter()
results = list(reader.read_bar_codes())
times.append((time.perf_counter() - start) * 1000)
found = found or bool(results)
return found, statistics.median(times)
for image in sorted(pathlib.Path("samples").glob("*.png")):
row = []
for preset in PRESETS:
found, ms = probe(image, preset)
row.append(f"{preset}: {'read' if found else 'miss'} {ms:.0f}ms")
print(f"{image.name:28} " + " | ".join(row))
clean.png high_performance: read 32ms | normal_quality: read 48ms | high_quality: read 51ms | max_quality: read 130ms
faded_thermal.png high_performance: read 26ms | normal_quality: read 43ms | high_quality: read 46ms | max_quality: read 144ms
half_resolution.png high_performance: read 27ms | normal_quality: read 41ms | high_quality: read 41ms | max_quality: read 89ms
heavy_blur.png high_performance: miss 7ms | normal_quality: miss 24ms | high_quality: miss 69ms | max_quality: miss 180ms
noisy_scan.png high_performance: read 26ms | normal_quality: read 42ms | high_quality: read 47ms | max_quality: read 116ms
Page1.png high_performance: read 21ms | normal_quality: read 34ms | high_quality: read 38ms | max_quality: read 90ms
Page2.png high_performance: read 21ms | normal_quality: read 33ms | high_quality: read 38ms | max_quality: read 89ms
rotated.png high_performance: miss 16ms | normal_quality: read 43ms | high_quality: read 57ms | max_quality: read 147ms
เรียกใช้มันหนึ่งครั้งกับการจับภาพจริงห้าสิบครั้งและการโต้แย้งที่ตั้งไว้จะจบลง
แนวทางปฏิบัติ
- จำกัด
DecodeTypeให้เป็นPDF417เว้นแต่คุณคาดหวังสัญลักษณ์ผสมอย่างแท้จริง ใช้MACRO_PDF417,COMPACT_PDF417, หรือMICRO_PDF417เมื่อคุณทราบรูปแบบนั้น - ตัดภาพก่อนทำการถอดรหัส การส่งสแกน A4 เต็มรูปเมื่อบาร์โค้ดครอบครองเพียง 5% จะทำให้เสียเวลาในการตรวจจับและเพิ่มพื้นผิวผลลัพธ์เท็จ
- เก็บไฟล์กลางแบบไม่สูญเสียข้อมูล PNG หรือ TIFF. JPEG ที่ตั้งค่าคุณภาพต่ำทำให้เกิด ringing ที่ขอบบาร์ที่ตัวถอดรหัสต้องการ
- จัดระดับการลองใหม่ แทนที่จะใช้ค่าตั้งต้นที่ช้าที่สุด
- แก้ไขการสร้างก่อนปรับการจดจำ หากคุณควบคุมตัวเข้ารหัส การเพิ่ม
x_dimensionไม่เสียค่าใช้จ่ายและแก้ปัญหาการพลาดได้มากกว่าการตั้งค่าผู้อ่านใด ๆ บทความ PDF417 generation article ครอบคลุมพารามิเตอร์เหล่านั้น - ตั้งค่า
timeoutบนผู้อ่านใด ๆ ที่ใช้ภาพที่ผู้ใช้จัดหา
รับใบอนุญาตฟรี
การสร้างรุ่นประเมินจะใส่ลายน้ำบนข้อความที่ถอดรหัสสำหรับสัญลักษณ์อื่น ๆ นอกจาก Code 39 ซึ่งจะส่งผลต่อการทดสอบแบบรอบเดียวใด ๆ ที่คุณทำ ลิงก์ ใบอนุญาตชั่วคราวฟรี จะลบสิ่งนั้นออกสำหรับการประเมิน
แหล่งข้อมูลเพิ่มเติมฟรี
- ตัวเลือกคุณภาพการอ่านบาร์โค้ดและพรีเซ็ต
- กรณีพิเศษในการอ่านบาร์โค้ด
- อ้างอิง API
- เครื่องมือบาร์โค้ดออนไลน์ฟรี
สรุป
การอ่านบาร์โค้ด PDF417 ด้วย Python เป็นการดำเนินการสองบรรทัดบนภาพที่สะอาดและเป็นปัญหาทางวิศวกรรมบนภาพจริง การวัดข้างต้นชี้ไปที่แนวทางที่ง่าย: ตั้งชื่อ DecodeType ของคุณ, ตั้งค่าเริ่มต้นเป็น normal_quality, ลองใหม่หนึ่งครั้งด้วย high_quality พร้อมเปิดใช้งานการดีคอนโวลูชัน, และตรวจสอบผลลัพธ์ทุกอย่างก่อนดำเนินการ เก็บค่าตั้งล่วงหน้าที่มีค่าใช้จ่ายสูงไว้สำหรับเส้นทางการลองใหม่, และเมื่อกลุ่มภาพทั้งหมดล้มเหลวในทุกการตั้งค่า, ให้แก้ไขการจับภาพแทนการแก้ไขตัวอ่าน ยินดีรับคำถามใน ฟอรั่มสนับสนุนฟรี.
คำถามที่พบบ่อย
ทำไมบาร์โค้ด PDF417 เดียวกันจึงอ่านได้ในภาพหนึ่งแต่ล้มเหลวในภาพอื่น?
การจดจำขึ้นอยู่กับจำนวนพิกเซลที่แต่ละโมดูลครอบคลุมหลังการจับภาพ เบลอ, การลดขนาด, และการบีบอัด JPEG ทั้งหมดทำให้ความกว้างของโมดูลที่มีประสิทธิภาพลดลง และเมื่อโมดูลลดลงต่ำกว่าประมาณสองพิกเซลที่ชัดเจน ใด ๆ preset ก็ไม่สามารถกู้คืนได้ฉันควรใช้ preset การจดจำใดสำหรับ PDF417?
เริ่มต้นด้วยnormal_qualityซึ่งเป็นค่าเริ่มต้น ย้ายไปใช้high_qualityสำหรับการจับภาพด้วยกล้องและการสแกน, และสงวนmax_qualityสำหรับการลองใหม่ เพราะมันช้ากว่าหลายเท่าโดยไม่ได้อ่านเพิ่มมากนักการจำกัด DecodeType ให้เป็น PDF417 จริง ๆ แล้วทำให้การอ่านเร็วขึ้นหรือไม่?
ใช่ ค่าเริ่มต้นคือDecodeType.ALL_SUPPORTED_TYPESซึ่งทำงานตรวจจับสำหรับทุกสัญลักษณ์ที่รองรับ การระบุ PDF417 อย่างชัดเจนจะลบงานนั้นออกและยังลบความเสี่ยงของผลบวกเท็จจากสัญลักษณ์อื่นด้วยAspose.BarCode สามารถอ่านข้อความ Macro PDF417 ที่แยกเป็นหลายภาพได้หรือไม่?
ได้. อ่านแต่ละส่วนด้วยDecodeType.MACRO_PDF417และใช้macro_pdf_417_file_id,macro_pdf_417_segment_id, และmacro_pdf_417_segments_countในผลลัพธ์ที่ขยายเพื่อประกอบข้อมูล payload ตามลำดับฉันจะรู้ได้อย่างไรว่าผลลัพธ์ที่ถอดรหัสได้เชื่อถือได้หรือไม่?
ตรวจสอบreading_qualityและconfidenceบนBarCodeResult, และใช้รูปสี่เหลี่ยมregionเพื่อยืนยันว่าบาร์โค้ดถูกพบในตำแหน่งที่คุณคาดหวังในภาพมันสามารถอ่าน PDF417 จากรูปถ่ายใบขับขี่หรือบอร์ดดิ้งพาสได้หรือไม่?
สามารถ, หากการจับภาพอยู่ในโฟกัสและบาร์โค้ดไม่ถูกตัดออก ให้ครอบตัดไปยังบริเวณบาร์โค้ดก่อนการอ่าน และแนะนำให้ใช้ PNG แทน JPEG สำหรับไฟล์ชั่วคราว
