การแปลงใบเสร็จรับเงินเป็นดิจิทัลโดยอัตโนมัติด้วย OCR และการเรียนรู้เชิงลึก PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

ต้องการดึงข้อมูลจากใบเสร็จโดยอัตโนมัติหรือไม่ ตรวจสอบการฝึกอบรมล่วงหน้าของ Nanonets ใบเสร็จรับเงิน OCR or สร้างของคุณเอง OCR ใบเสร็จรับเงินที่กำหนดเอง นอกจากนี้คุณยังสามารถ กำหนดเวลาการสาธิต เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับกรณีการใช้งาน AP ของเรา!


ใบเสร็จรับเงิน OCR หรือการแปลงใบเสร็จเป็นดิจิทัลจัดการกับความท้าทายในการดึงข้อมูลจากใบเสร็จโดยอัตโนมัติ ในบทความนี้ ผมจะกล่าวถึงทฤษฎีเบื้องหลังการแปลงใบเสร็จให้เป็นดิจิทัลและนำไปป์ไลน์แบบ end-to-end ไปใช้งานโดยใช้ OpenCV และ Tesseract. ฉันยังทบทวนเอกสารสำคัญสองสามฉบับที่ทำ Receipt Digitization โดยใช้ Deep Learning

ใบเสร็จรับเงินดิจิทัลคืออะไร?

ใบเสร็จจะนำข้อมูลที่จำเป็นสำหรับการค้าระหว่างบริษัทต่างๆ และส่วนใหญ่อยู่บนกระดาษหรือในรูปแบบกึ่งโครงสร้าง เช่น PDF และรูปภาพของกระดาษ/เอกสาร เพื่อจัดการข้อมูลนี้อย่างมีประสิทธิภาพ บริษัทจะดึงและจัดเก็บข้อมูลที่เกี่ยวข้องที่มีอยู่ในเอกสารเหล่านี้ ตามเนื้อผ้าสิ่งนี้ทำได้โดยการดึงข้อมูลที่เกี่ยวข้องด้วยตนเองและป้อนข้อมูลลงในฐานข้อมูลซึ่งเป็นกระบวนการที่ใช้แรงงานมากและมีราคาแพง

การแปลงใบเสร็จเป็นดิจิทัลจัดการกับความท้าทายในการดึงข้อมูลจากใบเสร็จโดยอัตโนมัติ

การดึงข้อมูลสำคัญจากใบเสร็จและแปลงเป็นเอกสารที่มีโครงสร้างสามารถให้บริการแอปพลิเคชันและบริการมากมาย เช่น การเก็บถาวรอย่างมีประสิทธิภาพ การทำดัชนีอย่างรวดเร็ว และการวิเคราะห์เอกสาร พวกเขามีบทบาทสำคัญในการปรับปรุงกระบวนการที่ใช้เอกสารมากและระบบอัตโนมัติของสำนักงานในด้านการเงิน การบัญชีและภาษีจำนวนมาก

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

ต้องการความแข็งแกร่ง รับ OCR or เครื่องสแกนใบเสร็จรับเงิน เพื่อดึงข้อมูลจากใบเสร็จ? ดู นาโนเน็ต ใบเสร็จรับเงิน OCR API!


ใครจะพบว่า Receipt Digitization มีประโยชน์?

ต่อไปนี้คือบางส่วนที่ Receipt Digitization สามารถสร้างผลกระทบอย่างใหญ่หลวงได้:

ระบบบัญชีเจ้าหนี้และลูกหนี้อัตโนมัติ

บัญชีเจ้าหนี้คอมพิวเตอร์ (AP) และบัญชีลูกหนี้ (AR) ด้วยตนเองมีค่าใช้จ่ายสูง ใช้เวลานาน และอาจทำให้เกิดความสับสนระหว่างผู้จัดการ ลูกค้า และผู้ขาย ด้วยการแปลงเป็นดิจิทัล บริษัทต่างๆ สามารถขจัดข้อเสียเหล่านี้และมีข้อได้เปรียบมากขึ้น – ความโปร่งใสที่เพิ่มขึ้น การวิเคราะห์ข้อมูล เงินทุนหมุนเวียนที่ได้รับการปรับปรุง และการติดตามที่ง่ายขึ้น

การเพิ่มประสิทธิภาพซัพพลายเชน

ห่วงโซ่อุปทานเป็นกระดูกสันหลังของการทำงานที่เหมาะสมของบริษัทหลายแห่ง การจัดการงาน กระแสข้อมูล และการไหลของผลิตภัณฑ์เป็นกุญแจสำคัญในการควบคุมอุปทานและการผลิตอย่างสมบูรณ์ นี่เป็นสิ่งสำคัญหากองค์กรต้องทันเวลาการส่งมอบและควบคุมต้นทุนการผลิต

บริษัทต่างๆ ที่เจริญรุ่งเรืองอย่างแท้จริงในทุกวันนี้มีบางสิ่งที่สำคัญเหมือนกัน นั่นคือ ห่วงโซ่อุปทานดิจิทัล 89% ของ บริษัท ด้วยซัพพลายเชนแบบดิจิทัลจะได้รับคำสั่งซื้อที่สมบูรณ์แบบจากซัพพลายเออร์ต่างประเทศ จึงมั่นใจได้ว่าจะส่งมอบตรงเวลา องค์ประกอบหลักประการหนึ่งของการทำให้ซัพพลายเชน 4.0 ยุคถัดไปเป็นจริง คือ การเก็บและจัดการข้อมูลโดยอัตโนมัติ ข้อมูลจำนวนมากนี้คือรูปแบบการรับและ ใบแจ้งหนี้. การป้อนใบเสร็จด้วยตนเองทำหน้าที่เป็นคอขวดในห่วงโซ่อุปทานและนำไปสู่ความล่าช้าที่ไม่จำเป็น หากการประมวลผลใบเสร็จนี้ถูกแปลงเป็นดิจิทัล อาจนำไปสู่การเพิ่มเวลาและประสิทธิภาพอย่างมาก


มีปัญหา OCR ในใจหรือไม่? ต้องการแปลงเป็นดิจิทัล ใบแจ้งหนี้, PDF หรือป้ายทะเบียนรถ ? ตรงไปที่ นาโนเน็ต และสร้างโมเดล OCR ฟรี!


ทำไมมันถึงเป็นปัญหายาก?

การแปลงใบเสร็จเป็นดิจิทัลนั้นทำได้ยากเนื่องจากใบเสร็จมีความหลากหลายและบางครั้งก็มีคุณภาพต่ำ การสแกนใบเสร็จยังแนะนำสิ่งประดิษฐ์หลายอย่างในสำเนาดิจิทัลของเรา สิ่งประดิษฐ์เหล่านี้มีความท้าทายในการอ่านง่ายมากมาย

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

นี่คือรายการของบางสิ่งที่ทำให้ยากต่อการถอดรหัส

  • ข้อความที่เขียนด้วยลายมือ
  • แบบอักษรขนาดเล็ก
  • ภาพที่มีเสียงดัง
  • ภาพจาง
  • การเคลื่อนไหวของกล้องและการสั่นไหว
  • ลายน้ำ
  • ริ้วรอย
  • ข้อความจาง

ท่อส่งใบเสร็จรับเงินแบบดิจิทัล

ไปป์ไลน์ทั่วไปสำหรับแนวทางแบบ end-to-end ประเภทนี้เกี่ยวข้องกับ:

  • กระบวนการเตรียมการผลิต
  • Optical Character ยอมรับ
  • การสกัดข้อมูล
  • การถ่ายโอนข้อมูล
การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

มาดำดิ่งลึกลงไปในแต่ละส่วนของไปป์ไลน์กัน ขั้นตอนแรกของกระบวนการคือการประมวลผลล่วงหน้า

กระบวนการเตรียมการผลิต

ใบเสร็จที่สแกนส่วนใหญ่มีเสียงดังและมีสิ่งประดิษฐ์ ดังนั้นเพื่อให้ OCR และระบบดึงข้อมูลทำงานได้ดี จึงจำเป็นต้องประมวลผลใบเสร็จล่วงหน้า วิธีการทั่วไปในการประมวลผลล่วงหน้า ได้แก่ – Greyscaling, Thresholding (Binarization) และ Noise removal

ระดับสีเทาเป็นเพียงการแปลงภาพ RGB เป็นภาพระดับสีเทา

การกำจัดเสียงรบกวนมักเกี่ยวข้องกับการลบสัญญาณรบกวนของ Salt and Pepper หรือเสียงรบกวนแบบเกาส์เซียน

เอ็นจิ้น OCR ส่วนใหญ่ทำงานได้ดีกับภาพขาวดำ ซึ่งสามารถทำได้โดยการจำกัดขอบเขต ซึ่งเป็นการกำหนดค่าพิกเซลที่สัมพันธ์กับค่าเกณฑ์ที่ให้ไว้ ค่าพิกเซลแต่ละค่าจะถูกเปรียบเทียบกับค่าเกณฑ์ หากค่าพิกเซลน้อยกว่าเกณฑ์ ค่านั้นจะถูกตั้งค่าเป็น 0 มิฉะนั้น ค่าพิกเซลจะถูกตั้งค่าเป็นค่าสูงสุด (โดยทั่วไปคือ 255)

OpenCV มีตัวเลือกการจำกัดเกณฑ์ต่างๆ – เกณฑ์อย่างง่าย, เกณฑ์ที่ปรับเปลี่ยนได้

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

Optical Character ยอมรับ

ขั้นตอนต่อไปในไปป์ไลน์คือ OCR. ใช้สำหรับอ่านข้อความจากรูปภาพ เช่น เอกสารที่สแกนหรือรูปภาพ เทคโนโลยีนี้ใช้เพื่อแปลงรูปภาพแทบทุกประเภทที่มีข้อความเขียน (พิมพ์ เขียนด้วยลายมือ หรือพิมพ์) เป็นข้อมูลข้อความที่เครื่องอ่านได้. OCR ประกอบด้วย 2 ขั้นตอน – การตรวจจับข้อความและการจดจำข้อความ

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

OCR มีหลายวิธี แนวทางคอมพิวเตอร์วิชันซิสเต็มคือการ

  • การใช้ฟิลเตอร์เพื่อแยกตัวละครออกจากพื้นหลัง
  • ใช้การตรวจจับเส้นขอบเพื่อจดจำอักขระที่กรอง
  • ใช้การจัดหมวดหมู่นักเวทย์เพื่อระบุตัวละคร

การใช้ฟิลเตอร์และการจัดประเภทรูปภาพนั้นค่อนข้างตรงไปตรงมา (คิดว่าการจัดประเภท MNIST โดยใช้ SVN) แต่การจับคู่เส้นขอบเป็นปัญหาที่ยากมาก และต้องใช้ความพยายามอย่างมากด้วยตนเองและไม่สามารถสรุปได้

ถัดมาคือแนวทางการเรียนรู้เชิงลึก Deep Learning สรุปได้ดีมาก วิธีที่นิยมใช้กันมากที่สุดในการตรวจหาข้อความคือ EAST EAST (เครื่องตรวจจับข้อความฉากที่แม่นยำอย่างมีประสิทธิภาพ) เป็นแนวทางที่เรียบง่ายแต่ทรงพลังสำหรับการตรวจจับข้อความ เครือข่าย EAST เป็นเวอร์ชันของ U-Net ที่รู้จักกันดี ซึ่งเหมาะสำหรับการตรวจจับคุณลักษณะที่มีขนาดต่างกัน

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

ซีอาร์เอ็น และ STN-OCR (Spatial Transformer Networks) เป็นเอกสารยอดนิยมอื่นๆ ที่ใช้ OCR

การสกัดข้อมูล

แนวทางทั่วไปที่สุดในการแก้ปัญหาการดึงข้อมูลเป็นแบบอิงตามกฎ โดยกฎจะถูกเขียนหลัง OCR เพื่อดึงข้อมูลที่จำเป็น นี่เป็นแนวทางที่ทรงพลังและแม่นยำ แต่คุณต้องเขียนกฎหรือเทมเพลตใหม่สำหรับเอกสารประเภทใหม่

ตามกฎหลายข้อ ใบกำกับสินค้า ระบบการวิเคราะห์มีอยู่ในวรรณคดี

  • Intellix โดย DocuWare ต้องใช้เทมเพลตที่มีคำอธิบายประกอบพร้อมช่องที่เกี่ยวข้อง
  • สมาร์ทฟิกซ์ ใช้กฎการกำหนดค่าที่ออกแบบมาโดยเฉพาะสำหรับแต่ละเทมเพลต

วิธีการที่อิงตามกฎต้องอาศัยกฎเทมเพลตที่กำหนดไว้ล่วงหน้าอย่างมากเพื่อดึงข้อมูลจากเค้าโครงใบแจ้งหนี้ที่เฉพาะเจาะจง

แนวทางหนึ่งที่กลายเป็นเรื่องธรรมดามากในช่วงไม่กี่ปีที่ผ่านมาคือการใช้เฟรมเวิร์กการตรวจจับวัตถุมาตรฐาน เช่น YOLO, Faster R-CNN เพื่อจดจำฟิลด์ ดังนั้นแทนที่จะใช้การตรวจจับข้อความล้วน การจดจำช่องและการตรวจจับข้อความจึงดำเนินการไปพร้อม ๆ กัน สิ่งนี้ทำให้ไปป์ไลน์มีขนาดเล็กลง (การตรวจจับข้อความ→การจดจำ→การแยกไปยังการตรวจจับ→การจดจำ) ไม่จำเป็นต้องเขียนกฎใดๆ เนื่องจากตัวตรวจจับวัตถุเรียนรู้ที่จะจดจำช่องเหล่านี้

การถ่ายโอนข้อมูล

เมื่อคุณดึงข้อมูลของคุณแล้ว การถ่ายโอนข้อมูลสามารถทำได้ตามที่กรณีการใช้งานของเรากำหนด บ่อยครั้งที่รูปแบบ JSON เพื่อเก็บข้อมูลฟิลด์นั้นสะดวก ไฟล์ JSON เหล่านี้สามารถแปลงเป็นไฟล์ XML, แผ่นงาน Excel, ไฟล์ CSV หรือไฟล์ข้อความธรรมดาได้โดยง่าย ขึ้นอยู่กับว่าใครต้องการทำงานกับข้อมูลและวิธีดำเนินการ

แปลงใบเสร็จรับเงินโดยใช้ Tesseract

ตอนนี้เรามีแนวคิดเกี่ยวกับไปป์ไลน์แล้ว เรามาปรับใช้กับตัวอย่างการรับ. นี่คือใบเสร็จที่เราจะทำงานด้วย เป้าหมายของเราในตอนท้ายคือการดึงชื่อร้านอาหาร รายการที่ซื้อพร้อมปริมาณและราคา วันที่ซื้อ และยอดรวม

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

กระบวนการเตรียมการผลิต

เนื่องจากใบเสร็จของเราอยู่ในระดับสีเทาแล้วและไม่มีสัญญาณรบกวนมากนัก ฉันจะทำการกำหนดเกณฑ์โดยใช้เกณฑ์ที่ 210 เท่านั้น คุณสามารถปรับแต่งค่าเพื่อให้ได้ผลลัพธ์ที่เหมาะสม น้อยเกินไปและคุณจะพลาดมาก หากเข้าใกล้ 255 มากเกินไปจะทำให้ทุกอย่างเป็นสีดำ

เราจะต้องติดตั้ง OpenCV ก่อน

pip install opencv-python

นี่คือรหัสสำหรับการจำกัดขอบเขต

import cv2
import numpy as np
from matplotlib import pyplot as plt # Read the image
img = cv2.imread('receipt.jpg',0)
# Simple thresholding
ret,thresh1 = cv2.threshold(img,210,255,cv2.THRESH_BINARY)
cv2.imshow(thresh1,’gray’)

นี่คือสิ่งที่ผลลัพธ์ออกมา

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

การตรวจจับข้อความ

สำหรับการตรวจจับข้อความ ฉันจะใช้ไลบรารีโอเพ่นซอร์สที่เรียกว่า Tesseract. เป็นไลบรารี OCR ขั้นสุดท้ายและได้รับการพัฒนาโดย Google ตั้งแต่ปี 2006 Tesseract (v4) รุ่นล่าสุดรองรับ OCR แบบ Deep Learning ที่มีความแม่นยำมากขึ้นอย่างมาก เอ็นจิ้น OCR พื้นฐานนั้นใช้เครือข่าย Long Short-Term Memory (LSTM)

ขั้นแรก ให้ติดตั้ง Tesseract เวอร์ชันล่าสุด

สำหรับอูบุนตู

sudo apt install tesseract-ocr

สำหรับ macOS

brew install tesseract --HEAD

สำหรับ windows คุณสามารถดาวน์โหลดไบนารีจากสิ่งนี้ หน้า

ตรวจสอบเวอร์ชัน tesseract ของคุณ

tesseract -v

เอาต์พุต -

tesseract 4.0.0-beta.3
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11
Found AVX512BW
Found AVX512F
Found AVX2
Found AVX
Found SSE

ติดตั้งการผูก Tesseract + Python ของคุณ

ตอนนี้เราได้ติดตั้งไบนารี Tesseract แล้ว ตอนนี้เราต้องติดตั้งการโยง Tesseract + Python เพื่อให้สคริปต์ Python ของเราสามารถสื่อสารกับ Tesseract ได้ เราจำเป็นต้องติดตั้งแพ็กภาษาเยอรมันด้วย เนื่องจากใบเสร็จเป็นภาษาเยอรมัน

pip install pytesseract
sudo apt-get install tesseract-ocr-deu

ตอนนี้เราได้ติดตั้ง Tesseract แล้ว เรามาเริ่มตรวจหากล่องข้อความกันTesseract มีฟังก์ชันการทำงานในตัวเพื่อตรวจจับกล่องข้อความ

import pytesseract
from pytesseract import Output
import cv2 img = cv2.imread('receipt.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
n_boxes = len(d['level'])
for i in range(n_boxes): (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, 0, 255), 2) cv2.imshow(img,'img')

นี่คือผลลัพธ์ของรหัสตรวจจับข้อความ

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

การรับรู้ข้อความ

เราจะ Tesseract เพื่อดำเนินการ OCR Tesseract 4 ใช้วิธีการเรียนรู้เชิงลึกซึ่งทำงานได้ดีกว่าการใช้งานโอเพ่นซอร์สอื่นๆ อย่างมาก

นี่คือรหัสของการจดจำข้อความ แม้ว่ามันจะเป็นซับในเพียงเส้นเดียวที่เรียบง่าย แต่ก็มีหลายอย่างที่อยู่ภายใต้ประทุน

extracted_text = pytesseract.image_to_string(img, lang = 'deu')

นี่คือผลลัพธ์ดิบ

'BerghotelnGrosse Scheideggn3818 GrindelwaldnFamilie R.MüllernnRech.Nr. 4572 30.07.2007/13:29: 17nBar Tisch 7/01n2xLatte Macchiato &ä 4.50 CHF 9,00n1xGloki a 5.00 CH 5.00n1xSchweinschnitzel ä 22.00 CHF 22.00nIxChässpätz 1 a 18.50 CHF 18.50nnTotal: CHF 54.50nnIncl. 7.6% MwSt 54.50 CHF: 3.85nnEntspricht in Euro 36.33 EURnEs bediente Sie: UrsulannMwSt Nr. : 430 234nTel.: 033 853 67 16nFax.: 033 853 67 19nE-mail: grossescheidegs@b luewin. ch'

นี่คือผลลัพธ์ที่จัดรูปแบบ

Berghotel
Grosse Scheidegg
3818 Grindelwald
Familie R.Müller Rech.Nr. 4572 30.07.2007/13:29: 17
Bar Tisch 7/01
2xLatte Macchiato &ä 4.50 CHF 9,00
1xGloki a 5.00 CH 5.00
1xSchweinschnitzel ä 22.00 CHF 22.00
IxChässpätz 1 a 18.50 CHF 18.50 Total: CHF 54.50 Incl. 7.6% MwSt 54.50 CHF: 3.85 Entspricht in Euro 36.33 EUR
Es bediente Sie: Ursula MwSt Nr. : 430 234
Tel.: 033 853 67 16
Fax.: 033 853 67 19
E-mail: grossescheidegs@b luewin. ch

ต้องแปลงเอกสาร ใบเสร็จ หรือ ใบแจ้งหนี้ แต่ขี้เกียจเกินไปที่จะเขียนโค้ด? ตรงไปที่ นาโนเน็ต และสร้างโมเดล OCR ฟรี!


การสกัดข้อมูล

ดังที่ฉันได้กล่าวไปแล้วก่อนหน้านี้ วิธีทั่วไปในการดึงข้อมูลคือ วิธีการที่อิงตามกฎ

ใบเสร็จทั้งหมดจากโรงแรมนี้จะเป็นไปตามโครงสร้างตายตัวและข้อมูลจะปรากฏในบรรทัดต่างๆ สิ่งนี้สะท้อนให้เห็นในเอาต์พุต OCR โดยที่การขึ้นบรรทัดใหม่จะแสดงด้วย 'n' ใช้สิ่งเหล่านี้ มาเขียนชุดกฎเพื่อดึงข้อมูล กฎชุดนี้สามารถใช้กับใบเสร็จใดก็ได้จากโรงแรมนี้ เนื่องจากจะใช้รูปแบบเดียวกัน

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

ฉันจะแยกชื่อร้านอาหาร วันที่ทำธุรกรรม รายการที่ซื้อ ปริมาณ ต้นทุนรวมต่อรายการ และจำนวนเงินทั้งหมดโดยใช้คำสั่งหลามอย่างง่ายและนิพจน์ทั่วไป

นี่คือพจนานุกรมที่ฉันจะจัดเก็บข้อมูลที่แยกออกมา

receipt _ocr = {}

ขั้นตอนแรกคือการแยกชื่อร้านอาหาร ตำแหน่งของชื่อร้านอาหารจะคงที่ในใบเสร็จรับเงินทั้งหมด และอยู่ใน 2 บรรทัดแรก ลองใช้สิ่งนี้เพื่อสร้างกฎ

splits = extracted_text.splitlines()
restaurant_name = splits[0] + '' + splits[1]

ต่อไปเราจะแยกวันที่ของการทำธุรกรรม วันที่ regex ค่อนข้างตรงไปตรงมา


import re
# regex for date. The pattern in the receipt is in 30.07.2007 in DD:MM:YYYY date_pattern = r'(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)dd'
date = re.search(date_pattern, extracted_text).group()
receipt_ocr['date'] = date
print(date)

เอาต์พุต -

‘30.10.2007’

ต่อไปเราจะดึงข้อมูลทั้งหมดที่เกี่ยวข้องกับรายการและต้นทุน

รายการมี CHF ซึ่งเป็นฟรังก์สวิส มาตรวจจับการเกิด CHF ทั้งหมดกันเถอะ ตอนนี้ เราสามารถตรวจจับเส้นได้โดยการจดจำอักขระระหว่าง 2 n และประกอบด้วย CHF ฉันกำลังตรวจสอบยอดรวมที่นี่ด้วย

# get lines with chf
lines_with_chf = []
for line in splits: if re.search(r'CHF',line): lines_with_chf.append(line) print(lines_with_chf)

เอาต์พุต -

2xLatte Macchiato &ä 4.50 CHF 9,00
1xSchweinschnitzel ä 22.00 CHF 22.00
IxChässpätz 1 a 18.50 CHF 18.50
Total: CHF 54.50
Incl. 7.6% MwSt 54.50 CHF: 3.85

หากคุณสังเกตเห็น Tesseract พลาดหนึ่งรายการเพราะตรวจพบ CH แทน CHF ฉันจะกล่าวถึงความท้าทายในระบบ OCR แบบเดิมในหัวข้อถัดไป

# get items, total, ignore Incl
items = []
for line in lines_with_chf: print(line) if re.search(r'Incl',line): continue if re.search(r'Total', line): total = line else: items.append(line) # Get Name, quantity and cost all_items = {}
for item in items: details = item.split() quantity_name = details[0] quantity = quantity_name.split('x')[0] name = quantity_name.split('x')[1] cost = details[-1] all_items[name] = {'quantity':quantity, 'cost':cost} total = total.split('CHF')[-1] # Store the results in the dict
receipt_ocr['items'] = all_items
receipt_ocr[‘total’] = total import json receipt_json = json.dumps(receipt_ocr)
print(receipt_json)

การพิมพ์เอาต์พุต JSON ของเรา –

{'date': '30.07.2007', 'items': {'Chässpätz': {'cost': '18.50', 'quantity': 'I'}, 'Latte': {'cost': '9,00', 'quantity': '2'}, 'Schweinschnitzel': {'cost': '22.00', 'quantity': '1'}}, 'total': ' 54.50'}

ข้อมูลสำคัญทั้งหมดได้รับการแยกและทิ้งลงในใบเสร็จ_json..

ปัญหาเกี่ยวกับแนวทางทั่วไป

แม้ว่าเราจะดึงข้อมูลออก แต่ไปป์ไลน์ด้านบนยังพลาดบางสิ่งและถือว่าเหมาะสมที่สุด สำหรับใบเสร็จใหม่แต่ละใบ เราจำเป็นต้องเขียนกฎชุดใหม่ ดังนั้นจึงไม่สามารถปรับขนาดได้

เลย์เอาต์ ขนาดฟอนต์และขนาดฟอนต์ เอกสารที่เขียนด้วยลายมืออาจมีหลากหลายรูปแบบ ความแตกต่างของเลย์เอาต์จะส่งผลต่อแนวทางตามกฎและต้องคำนึงถึงสิ่งเหล่านี้ ซึ่งกลายเป็นเรื่องน่าเบื่อหน่ายอย่างมาก ความแตกต่างของขนาดแบบอักษรและแบบอักษรทำให้ยากต่อการจดจำและดึงข้อมูล

เหตุใดไปป์ไลน์ Deep Learning แบบ end-to-end จึงดีกว่า

ปัญหาที่ใหญ่ที่สุดอย่างหนึ่งของแนวทางมาตรฐานคือการขาดลักษณะทั่วไป แนวทางตามกฎไม่สามารถสรุปได้และจำเป็นต้องเขียนกฎใหม่สำหรับเทมเพลตใหม่ นอกจากนี้ การเปลี่ยนแปลงหรือการเปลี่ยนแปลงใดๆ ในเทมเพลตที่มีอยู่ต้องนำมาพิจารณาด้วย

แนวทางการเรียนรู้เชิงลึกจะสามารถเรียนรู้กฎเหล่านี้ และจะสามารถสรุปในเค้าโครงต่างๆ ได้อย่างง่ายดาย หากเรามีกฎเหล่านี้ในชุดข้อมูลการฝึกอบรมของเรา

การเรียนรู้เชิงลึกและการดึงข้อมูล

ฉันทบทวนเอกสารสองสามฉบับที่ใช้วิธีการเรียนรู้เชิงลึกแบบ end-to-end.

น่ารัก

CUTIE: เรียนรู้ที่จะเข้าใจเอกสารด้วย Convolutional Universal Text Information Extractor

บทความนี้ขอเสนอ วิธีการดึงข้อมูลสำคัญตามการเรียนรู้ด้วยความต้องการทรัพยากรมนุษย์ที่จำกัด. เป็นการรวมข้อมูลจากทั้งความหมายเชิงความหมายและการกระจายเชิงพื้นที่ของข้อความในเอกสาร รูปแบบที่เสนอของพวกเขา Convolutional Universal Text Information Extractor (CUTIE) ใช้โครงข่ายประสาทเทียมแบบ convolutional กับข้อความแบบ gridded โดยที่ข้อความจะถูกฝังเป็นคุณลักษณะที่มีความหมายแฝง

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

แบบที่เสนอ, จัดการปัญหาการดึงข้อมูลที่สำคัญโดย

  • ขั้นแรกให้สร้างข้อความ gridded ด้วยข้อเสนอ วิธีการทำแผนที่ตำแหน่งกริด. ในการสร้างข้อมูลกริดสำหรับโครงข่ายประสาทเทียม ภาพเอกสารที่สแกนจะถูกประมวลผลโดยเอ็นจิ้น OCR เพื่อรับข้อความและตำแหน่งสัมบูรณ์/สัมพัทธ์ ข้อความจะถูกแมปจากภาพเอกสารต้นฉบับที่สแกนไปยังตารางเป้าหมาย เพื่อให้ตารางที่แมปรักษาความสัมพันธ์เชิงพื้นที่ดั้งเดิมระหว่างข้อความ และยังเหมาะสมกว่าที่จะใช้เป็นอินพุตสำหรับโครงข่ายประสาทเทียม
  • จากนั้นจึงนำโมเดล CUTIE ไปใช้กับข้อความกริด ข้อมูลเชิงความหมายที่หลากหลายถูกเข้ารหัสจากข้อความแบบกริดที่ระยะเริ่มต้นของโครงข่ายประสาทเทียมแบบคอนโวลูชันนัลพร้อมเลเยอร์การฝังคำ

CUTIE ช่วยให้สามารถค้นหาข้อมูลเชิงความหมายและข้อมูลเชิงพื้นที่ของข้อความในภาพเอกสารที่สแกนได้พร้อมกัน และสามารถเข้าถึงผลลัพธ์ที่ทันสมัยสำหรับการดึงข้อมูลสำคัญ

นางแบบน่ารัก

มี 2 ​​รุ่น CUTIE-A และ CUTIE-B CUTIE-A ที่เสนอเป็นโครงข่ายประสาทเทียมแบบคอนโวลูชั่นความจุสูงที่หลอมรวมคุณสมบัติหลายความละเอียดโดยไม่สูญเสียคุณสมบัติที่มีความละเอียดสูง CUTIE-B เป็นเครือข่ายแบบ Convolutional ที่มีการบิดแบบรุนแรงเพื่อขยายขอบเขตการมองเห็นและโมดูล Atrous Spatial Pyramid Pooling (ASPP) เพื่อจับภาพบริบทแบบหลายสเกล ทั้ง CUTIE-A และ CUITE-B ดำเนินกระบวนการเข้ารหัสความหมายเชิงความหมายด้วยเลเยอร์การฝังคำในระยะเริ่มต้น

งานของ CUTIE มีความคล้ายคลึงกับงานการแบ่งส่วนความหมาย ตารางที่แมปมีจุดข้อมูลที่กระจัดกระจาย (โทเค็นข้อความ) ในทางตรงกันข้ามกับรูปภาพที่กระจายด้วยพิกเซล ข้อความหลักที่แมปตำแหน่งกริดอยู่ใกล้หรือไกลกันเนื่องจากรูปแบบเอกสารประเภทต่างๆ ดังนั้นการรวมความสามารถในการประมวลผลบริบทแบบหลายสเกลจะเป็นประโยชน์ต่อเครือข่าย

ชุด

วิธีการที่เสนอนี้ได้รับการประเมินจากความท้าทายในการอ่านที่แข็งแกร่งของ ICDAR 2019 บนชุดข้อมูล SROIE และยังอยู่ในชุดข้อมูลที่สร้างขึ้นเองด้วยรูปภาพเอกสารที่สแกน 3 ประเภท

พื้นที่ ชุดข้อมูล ICDAR 2019 SROIE ใช้ซึ่งมีภาพใบเสร็จรับเงินที่สแกนทั้งหมด 1000 ภาพ รูปภาพใบเสร็จแต่ละรูปประกอบด้วยช่องข้อความหลักประมาณสี่ช่อง เช่น ชื่อสินค้า ราคาต่อหน่วย วันที่ และต้นทุนรวม ข้อความที่มีคำอธิบายประกอบในชุดข้อมูลประกอบด้วยตัวเลขและอักขระภาษาอังกฤษเป็นหลัก

ชุดข้อมูลที่สร้างขึ้นเองประกอบด้วยเอกสารสแกนใบเสร็จรับเงินของสเปนที่มีคำอธิบายประกอบ 4, 484 ฉบับ ซึ่งรวมถึงใบเสร็จแท็กซี่ ใบเสร็จค่าอาหาร (ME) และใบเสร็จของโรงแรม โดยมีข้อมูลสำคัญ 9 ระดับที่แตกต่างกัน

ผลสอบ

ประสิทธิภาพโดยรวมได้รับการประเมินโดยใช้ความแม่นยำเฉลี่ย (AP – และวัดในแง่ของความแม่นยำต่อคลาสใน 9 คลาส) และความแม่นยำเฉลี่ยแบบนุ่มนวล (softAP) โดยที่การคาดการณ์ของคลาสข้อมูลสำคัญจะพิจารณาว่าถูกต้องหากความจริงพื้นๆ มีการทำนายอย่างถูกต้องแม้ว่าผลบวกที่ผิดพลาดบางอย่างจะรวมอยู่ในการทำนายขั้นสุดท้าย การวิเคราะห์ร่วมกันของ AP และ softAP ช่วยให้เข้าใจประสิทธิภาพของแบบจำลองได้ดีขึ้น

คุณสามารถดูผลลัพธ์ในตารางด้านล่าง

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

GCN สำหรับ VRD

กราฟ Convolution สำหรับการดึงข้อมูลหลายรูปแบบจากเอกสารที่มองเห็นได้ชัดเจน

บทความนี้จะแนะนำแบบจำลองกราฟที่ใช้การบิดเพื่อรวมข้อมูลที่เป็นข้อความและภาพที่นำเสนอในเอกสาร Visually Rich (VRD) การฝังกราฟได้รับการฝึกฝนเพื่อสรุปบริบทของเซ็กเมนต์ข้อความในเอกสาร และรวมเพิ่มเติมกับการฝังข้อความสำหรับการแยกเอนทิตี

ในเอกสารนี้พวกเขาเรียกเอกสารว่า VRD และฉันจะยึดติดกับมัน

เอกสารแต่ละฉบับถูกจำลองเป็นกราฟของส่วนข้อความ โดยที่แต่ละส่วนข้อความจะประกอบด้วยตำแหน่งของส่วนและข้อความภายในนั้น กราฟประกอบด้วยโหนดที่แสดงถึงส่วนของข้อความ และขอบที่แสดงถึงการพึ่งพาทางสายตา เช่น รูปร่างและระยะห่างที่สัมพันธ์กัน ระหว่างสองโหนด

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

การฝังกราฟที่สร้างโดยการบิดกราฟจะสรุปบริบทของเซ็กเมนต์ข้อความในเอกสาร ซึ่งจะรวมเพิ่มเติมกับการฝังข้อความสำหรับการแยกเอนทิตีโดยใช้โมเดล BiLSTM-CRF มาตรฐาน

รุ่น

ขั้นแรก โมเดลจะเข้ารหัสแต่ละส่วนข้อความในเอกสารลงในกราฟที่ฝัง โดยใช้การบิดกราฟหลายชั้น การฝังแสดงข้อมูลในส่วนข้อความตามบริบทที่เป็นภาพและข้อความ บริบทภาพคือเลย์เอาต์ของเอกสารและตำแหน่งสัมพันธ์ของแต่ละเซ็กเมนต์กับเซ็กเมนต์อื่น บริบทที่เป็นข้อความคือการรวมข้อมูลที่เป็นข้อความในเอกสารโดยรวม โมเดลเรียนรู้ที่จะกำหนดน้ำหนักให้กับข้อความจากกลุ่มเพื่อนบ้านที่สูงขึ้น จากนั้น กระดาษจะรวมการฝังกราฟกับการฝังข้อความ และใช้แบบจำลอง BiLSTM-CRF มาตรฐานสำหรับการแยกเอนทิตี

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

ชุด

ใช้ชุดข้อมูลจริงสองชุด ได้แก่ ใบกำกับภาษีมูลค่าเพิ่ม (VATI) และใบรับซื้อระหว่างประเทศ (IPR) VATI ประกอบด้วยรูปภาพที่ผู้ใช้อัปโหลด 3000 ภาพและมีหน่วยงาน 16 รายการที่แน่นอน ตัวอย่างนิติบุคคล ได้แก่ ชื่อของผู้ซื้อ/ผู้ขาย วันที่ และจำนวนภาษี ใบแจ้งหนี้เป็นภาษาจีน และมีเทมเพลตคงที่เนื่องจากเป็นใบแจ้งหนี้มาตรฐานระดับประเทศ

IPR คือชุดข้อมูลของเอกสารใบเสร็จรับเงินที่สแกนแล้ว 1500 ฉบับเป็นภาษาอังกฤษ ซึ่งมี 4 รายการให้ถูกต้อง (หมายเลขใบแจ้งหนี้ ชื่อผู้ขาย ชื่อผู้ชำระเงิน และจำนวนเงินทั้งหมด) มี 146 แม่แบบสำหรับใบเสร็จ

ผลสอบ

คะแนน F1 ใช้ในการประเมินประสิทธิภาพของแบบจำลองในการทดสอบทั้งหมด ตารางด้านล่างมีผลลัพธ์ในชุดข้อมูล 2 ชุด

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

ข้อมูลพื้นฐานที่ XNUMX ใช้ BiLSTM-CRF กับแต่ละส่วนของข้อความ โดยที่แต่ละส่วนของข้อความเป็นประโยคเดี่ยว

Baseline II ใช้โมเดลการติดแท็กกับเซ็กเมนต์ข้อความที่ต่อกัน

เร็วกว่า-RCNN + AED

แนวทางการเรียนรู้เชิงลึกเพื่อการรู้จำใบเสร็จ

เอกสารนี้นำเสนอแนวทางการเรียนรู้เชิงลึกสำหรับการจดจำใบเสร็จที่สแกน ระบบการรู้จำมีสองโมดูลหลัก: การตรวจหาข้อความตามเครือข่ายข้อเสนอข้อความของ Connectionist และการรู้จำข้อความตามตัวเข้ารหัส-ตัวถอดรหัสตามความสนใจ ระบบได้คะแนน F71.9 1% สำหรับงานตรวจจับและจดจำ

การตรวจจับข้อความ

โครงสร้าง CTPN นั้นคล้ายกับ Faster R-CNN ด้วยการเพิ่มเลเยอร์ LSTM โมเดลเครือข่ายส่วนใหญ่ประกอบด้วยสามส่วน: การแยกคุณลักษณะโดย VGG16, LSTM แบบสองทิศทาง และการถดถอยของขอบเขต

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

การรับรู้ข้อความ

ใช้ AED เพื่อจดจำบรรทัดข้อความ เครื่อง AED มีสองโมดูลหลัก: DenseNet สำหรับการดึงคุณลักษณะจากภาพข้อความและ LSTM รวมกับแบบจำลองความสนใจสำหรับการคาดคะเนข้อความที่ส่งออก

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

ชุด

ใช้ชุดข้อมูลจาก SROIE 2019 พวกเขาแบ่งข้อมูลการฝึกอบรมออกเป็นการฝึกอบรม การตรวจสอบ และการทดสอบ และสุ่มเลือก 80% ของรายรับสำหรับการฝึกอบรม 10% ของรายรับสำหรับการตรวจสอบ และส่วนที่เหลือสำหรับการทดสอบ ส่งผลให้ได้รับการฝึกอบรม 500 ใบ, 63 ใบรับสำหรับการตรวจสอบ และ 63 ใบสำหรับการทดสอบ

ผลสอบ

สำหรับการตรวจหาข้อความ กระดาษจะใช้Tightness-aware Intersection-over-Union (TIoU) สำหรับการจดจำข้อความ กระดาษนี้ใช้ F1 , Precision และ Recall

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

ตารางที่ 2 แสดงผลของ CTPN โดยมีสามเงื่อนไข: CTPN บนภาพต้นฉบับ; การประมวลผลล่วงหน้า + CTPN การประมวลผลล่วงหน้า + การตรวจสอบ CTPN + OCR ตารางที่ XNUMX แสดงผลเครือข่าย AED

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

แน่นอนว่ามีวิธีที่ง่ายกว่า เข้าใจง่ายกว่าในการทำเช่นนี้


ต้องการความแข็งแกร่ง รับ OCR เพื่อดึงข้อมูลจากใบเสร็จ? ดู นาโนเน็ต ใบเสร็จรับเงิน OCR API!


OCR กับ Nanonets

อัปเดต #1: เราเพิ่งเปิดตัว .ของเรา รับ OCR รุ่นก่อนการฝึกอบรม ไปที่ https://app.nanonets.com แล้วเริ่มการทดสอบได้เลย!

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

พื้นที่ นาโนเน็ต OCR API ช่วยให้คุณสร้างโมเดล OCR ได้อย่างง่ายดาย คุณไม่ต้องกังวลกับการประมวลผลภาพล่วงหน้าหรือกังวลเกี่ยวกับเทมเพลตที่ตรงกันหรือสร้างเอ็นจิ้นตามกฎเพื่อเพิ่มความแม่นยำของโมเดล OCR ของคุณ

คุณสามารถอัปโหลดข้อมูล ใส่คำอธิบายประกอบ ตั้งค่าโมเดลเพื่อฝึกและรอรับการคาดคะเนผ่าน UI ที่ใช้เบราว์เซอร์โดยไม่ต้องเขียนโค้ดแม้แต่บรรทัดเดียว กังวลเกี่ยวกับ GPU หรือค้นหาสถาปัตยกรรมที่เหมาะสมสำหรับโมเดลการเรียนรู้เชิงลึกของคุณ คุณยังสามารถรับการตอบสนอง JSON ของการคาดคะเนแต่ละรายการเพื่อรวมเข้ากับระบบของคุณเอง และสร้างแอปที่ขับเคลื่อนด้วยการเรียนรู้ของเครื่อง ซึ่งสร้างจากอัลกอริธึมล้ำสมัยและโครงสร้างพื้นฐานที่แข็งแกร่ง

การใช้ GUI: https://app.nanonets.com/

คุณยังสามารถใช้ Nanonets-OCR API ได้โดยทำตามขั้นตอนด้านล่าง:

ขั้นตอนที่ 1: โคลน Repo ติดตั้งการพึ่งพา

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

ขั้นตอนที่ 2: รับรหัส API ฟรีของคุณ
รับคีย์ API ฟรีจาก http://app.nanonets.com/#/keys

การแปลงใบเสร็จเป็นดิจิทัลด้วย OCR และ Deep Learning

ขั้นตอนที่ 3: ตั้งค่าคีย์ API เป็นตัวแปรสภาพแวดล้อม

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

ขั้นตอนที่ 4: สร้างโมเดลใหม่

python ./code/create-model.py

หมายเหตุ สิ่งนี้จะสร้าง MODEL_ID ที่คุณต้องการสำหรับขั้นตอนต่อไป

ขั้นตอนที่ 5: เพิ่มรหัสรุ่นเป็นตัวแปรสภาพแวดล้อม

export NANONETS_MODEL_ID=YOUR_MODEL_ID

หมายเหตุ คุณจะได้รับ YOUR_MODEL_ID จากขั้นตอนก่อนหน้า

ขั้นตอนที่ 6: อัปโหลดข้อมูลการฝึกอบรม
ข้อมูลการฝึกอบรมอยู่ใน images (ไฟล์รูปภาพ) และ annotations (คำอธิบายประกอบสำหรับไฟล์รูปภาพ)

python ./code/upload-training.py

ขั้นตอนที่ 7: โมเดลรถไฟ
เมื่ออัปโหลดรูปภาพแล้ว ให้เริ่มฝึก Model

python ./code/train-model.py

ขั้นตอนที่ 8: รับสถานะโมเดล
โมเดลใช้เวลาฝึกประมาณ 2 ชั่วโมง คุณจะได้รับอีเมลเมื่อโมเดลได้รับการฝึกอบรม ในระหว่างนี้คุณตรวจสอบสถานะของโมเดล

python ./code/model-state.py

ขั้นตอนที่ 9: ทำการทำนาย
เมื่อนางแบบได้รับการฝึกฝน คุณสามารถทำนายโดยใช้แบบจำลอง

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

อ่านเพิ่มเติม

ปรับปรุง:
เพิ่มเอกสารการอ่านเพิ่มเติมเกี่ยวกับความก้าวหน้าล่าสุดในการแปลงใบเสร็จให้เป็นดิจิทัลโดยอัตโนมัติโดยใช้ OCR และ Deep Learning

ประทับเวลา:

เพิ่มเติมจาก AI และการเรียนรู้ของเครื่อง