การสร้างบาร์โค้ด 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.

อ่านบาร์โค้ด 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_performancenormal_qualityhigh_qualitymax_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

สี่สิ่งที่สรุปจากตารางนี้และมีประโยชน์มากกว่าตัวเลขแต่ละตัว:

  1. สัญญาณรบกวนและคอนทราสต์ต่ำไม่ได้เป็นปัญหาตามที่คนคิด Reed‑Solomon พร้อมกับตัวตรวจจับได้ดูดซับสัญญาณรบกวนแบบเกาส์เชียนหนักและการลดคอนทราสต์ 82% ในพรีเซ็ตที่เร็วที่สุด. หยุดปรับแต่งสำหรับสิ่งเหล่านี้.
  2. การหมุนพร้อมกับการเบลอเป็นกรณีที่แยกพรีเซ็ตออกจากกัน นอกจากนี้ยังเป็นโปรไฟล์ที่ตรงกับการจับภาพด้วยโทรศัพท์มือถือ, ซึ่งเป็นเหตุผลที่ high_performance ไม่ใช่ค่าเริ่มต้นที่ถูกต้องสำหรับ pipeline ที่มาจากมือถือใด ๆ.
  3. max_quality ใช้เวลาสามเท่าของ normal_quality แต่ไม่ได้ให้ข้อมูลเพิ่มเติม มันได้ตำแหน่งเป็นเส้นทางลองครั้งที่สอง ไม่ใช่ค่าเริ่มต้น.
  4. เมื่อกริดโมดูลหายไป ไม่มีพรีเซ็ตใดสามารถกู้คืนได้ แถวที่มีการเบลอหนักเป็นความล้มเหลวทั่วทั้งระบบ, และ 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.

ปรับ QualitySettings เพื่ออ่านบาร์โค้ด PDF417 ที่เบลอใน Python.

วัดได้: พลาดใน 12 ms โดยไม่มีการแทนที่, อ่านใน 54 ms พร้อมกับการแทนที่นั้น. คุณสมบัติหนึ่งทำให้ผลลัพธ์เปลี่ยนแปลง, และผลลัพธ์ยังกลับมารวดเร็วกว่า preset max_quality ที่คาดไว้.

คุณสมบัติที่ควรรู้:

คุณสมบัติค่าเมื่อควรใช้
deconvolutionFAST, NORMAL, SLOWภาพเบลอจากการเคลื่อนที่และภาพที่โฟกัสไม่ชัด
barcode_qualityHIGH, NORMAL, LOWข้อบกพร่องการพิมพ์, การซีดจากความร้อน, สิ่งผิดปกติจากแฟกซ์
x_dimensionAUTO, SMALL, NORMAL, LARGE, USE_MINIMAL_X_DIMENSIONบาร์โค้ดหนาแน่น หรือขนาดโมดูลที่กำหนดและรู้จัก
minimal_x_dimensionfloatใช้ร่วมกับ USE_MINIMAL_X_DIMENSION เพื่อกำหนดค่าต่ำสุด
complex_backgroundAUTO, DISABLED, ENABLEDบาร์โค้ดที่พิมพ์บนงานศิลปะหรือรูปแบบที่มีลวดลาย
inverse_imageAUTO, DISABLED, ENABLEDบาร์โค้ดสีขาวบนพื้นดำ, การจับภาพหน้าจอ
allow_incorrect_barcodesboolใช้เพื่อการวินิจฉัยเท่านั้น, ไม่ควรใช้ในการผลิต

ข้อสุดท้ายนี้ควรมีคำเตือน 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.

หน้า 1.

หน้า 2.

หน้า 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 ซึ่งจะส่งผลต่อการทดสอบแบบรอบเดียวใด ๆ ที่คุณทำ ลิงก์ ใบอนุญาตชั่วคราวฟรี จะลบสิ่งนั้นออกสำหรับการประเมิน

แหล่งข้อมูลเพิ่มเติมฟรี

สรุป

การอ่านบาร์โค้ด PDF417 ด้วย Python เป็นการดำเนินการสองบรรทัดบนภาพที่สะอาดและเป็นปัญหาทางวิศวกรรมบนภาพจริง การวัดข้างต้นชี้ไปที่แนวทางที่ง่าย: ตั้งชื่อ DecodeType ของคุณ, ตั้งค่าเริ่มต้นเป็น normal_quality, ลองใหม่หนึ่งครั้งด้วย high_quality พร้อมเปิดใช้งานการดีคอนโวลูชัน, และตรวจสอบผลลัพธ์ทุกอย่างก่อนดำเนินการ เก็บค่าตั้งล่วงหน้าที่มีค่าใช้จ่ายสูงไว้สำหรับเส้นทางการลองใหม่, และเมื่อกลุ่มภาพทั้งหมดล้มเหลวในทุกการตั้งค่า, ให้แก้ไขการจับภาพแทนการแก้ไขตัวอ่าน ยินดีรับคำถามใน ฟอรั่มสนับสนุนฟรี.

คำถามที่พบบ่อย

  1. ทำไมบาร์โค้ด PDF417 เดียวกันจึงอ่านได้ในภาพหนึ่งแต่ล้มเหลวในภาพอื่น?
    การจดจำขึ้นอยู่กับจำนวนพิกเซลที่แต่ละโมดูลครอบคลุมหลังการจับภาพ เบลอ, การลดขนาด, และการบีบอัด JPEG ทั้งหมดทำให้ความกว้างของโมดูลที่มีประสิทธิภาพลดลง และเมื่อโมดูลลดลงต่ำกว่าประมาณสองพิกเซลที่ชัดเจน ใด ๆ preset ก็ไม่สามารถกู้คืนได้

  2. ฉันควรใช้ preset การจดจำใดสำหรับ PDF417?
    เริ่มต้นด้วย normal_quality ซึ่งเป็นค่าเริ่มต้น ย้ายไปใช้ high_quality สำหรับการจับภาพด้วยกล้องและการสแกน, และสงวน max_quality สำหรับการลองใหม่ เพราะมันช้ากว่าหลายเท่าโดยไม่ได้อ่านเพิ่มมากนัก

  3. การจำกัด DecodeType ให้เป็น PDF417 จริง ๆ แล้วทำให้การอ่านเร็วขึ้นหรือไม่?
    ใช่ ค่าเริ่มต้นคือ DecodeType.ALL_SUPPORTED_TYPES ซึ่งทำงานตรวจจับสำหรับทุกสัญลักษณ์ที่รองรับ การระบุ PDF417 อย่างชัดเจนจะลบงานนั้นออกและยังลบความเสี่ยงของผลบวกเท็จจากสัญลักษณ์อื่นด้วย

  4. Aspose.BarCode สามารถอ่านข้อความ Macro PDF417 ที่แยกเป็นหลายภาพได้หรือไม่?
    ได้. อ่านแต่ละส่วนด้วย DecodeType.MACRO_PDF417 และใช้ macro_pdf_417_file_id, macro_pdf_417_segment_id, และ macro_pdf_417_segments_count ในผลลัพธ์ที่ขยายเพื่อประกอบข้อมูล payload ตามลำดับ

  5. ฉันจะรู้ได้อย่างไรว่าผลลัพธ์ที่ถอดรหัสได้เชื่อถือได้หรือไม่?
    ตรวจสอบ reading_quality และ confidence บน BarCodeResult, และใช้รูปสี่เหลี่ยม region เพื่อยืนยันว่าบาร์โค้ดถูกพบในตำแหน่งที่คุณคาดหวังในภาพ

  6. มันสามารถอ่าน PDF417 จากรูปถ่ายใบขับขี่หรือบอร์ดดิ้งพาสได้หรือไม่?
    สามารถ, หากการจับภาพอยู่ในโฟกัสและบาร์โค้ดไม่ถูกตัดออก ให้ครอบตัดไปยังบริเวณบาร์โค้ดก่อนการอ่าน และแนะนำให้ใช้ PNG แทน JPEG สำหรับไฟล์ชั่วคราว

อ่านต่อ