โปรเจกต์นี้เป็นตัวอย่างการใช้งาน OCR (Optical Character Recognition) ร่วมกับโมเดล Mistral สำหรับแปลงไฟล์ PDF หรือรูปภาพให้เป็นข้อความ
ศึกษารายละเอียดเชิงลึกได้ที่
- รองรับไฟล์ PDF และรูปภาพ
- แปลงข้อความจากเอกสารที่สแกนหรือรูปภาพ
- ใช้งานโมเดล Mistral เพื่อประมวลผลข้อความ
POCMistralOCR/
├── appsettings.json
├── Program.cs
├── docs/
│ ├── input/
│ └── output/
└── ...
- สามารถศึกษาข้อมูลเกี่ยวกับ Mistral OCR ได้ที่เว็บไซต์ทางการ: https://docs.mistral.ai/capabilities/OCR/basic_ocr/
- การขอ Access Token (API Key):
- สมัครสมาชิกหรือเข้าสู่ระบบที่ https://console.mistral.ai/
- ไปที่เมนู API Keys แล้วสร้าง API Key ใหม่
- นำ API Key ที่ได้ไปใส่ในไฟล์
POCMistralOCR/appsettings.jsonในส่วนMistralOCR:ApiKey
| Package Name | Version | ใช้เพื่ออะไร |
|---|---|---|
| Docnet.Core | 2.6.0 | สำหรับอ่านและแปลงไฟล์ PDF เป็นภาพ (split PDF) |
| Microsoft.Extensions.Configuration | 9.0.5 | สำหรับโหลดและจัดการคอนฟิก (เช่น appsettings) |
| Microsoft.Extensions.Configuration.Json | 9.0.5 | สำหรับอ่านคอนฟิกจากไฟล์ JSON (appsettings.json) |
| SkiaSharp | 3.119.0 | สำหรับประมวลผลและบันทึกไฟล์ภาพ (PNG) |
รายละเอียดแต่ละ package:
- Docnet.Core: ไลบรารีสำหรับอ่านไฟล์ PDF และแปลงแต่ละหน้าเป็นภาพ bitmap ได้อย่างรวดเร็ว เหมาะกับงาน OCR ที่ต้องแยกหน้า PDF
- Microsoft.Extensions.Configuration: ไลบรารีมาตรฐานของ .NET สำหรับโหลดคอนฟิก เช่น API Key, Endpoint ฯลฯ
- Microsoft.Extensions.Configuration.Json: ส่วนเสริมที่ช่วยให้ .NET โหลดคอนฟิกจากไฟล์ JSON ได้ง่าย (ใช้กับ appsettings.json)
- SkiaSharp: ไลบรารีกราฟิก cross-platform สำหรับสร้าง/บันทึก/แปลงไฟล์ภาพ เช่น PNG, JPEG ฯลฯ ใช้ร่วมกับ Docnet.Core เพื่อบันทึกภาพแต่ละหน้าของ PDF
-
ติดตั้ง .NET 8.0 หรือเวอร์ชันที่รองรับ
- สามารถดาวน์โหลดและติดตั้ง .NET 8.0 ได้จากเว็บไซต์ทางการของไมโครซอฟท์: https://dotnet.microsoft.com/download/dotnet/8.0
- หลังติดตั้ง ตรวจสอบเวอร์ชันด้วยคำสั่ง
dotnet --version
-
สั่ง build โปรเจกต์
dotnet build
-
รันโปรแกรม (ควรรันในโฟลเดอร์ POCMistralOCR หรือระบุ path ของโปรเจกต์ย่อยให้ถูกต้อง)
-
ตัวอย่าง:
cd POCMistralOCR dotnet run -
หรือจาก root folder:
dotnet run --project POCMistralOCR/POCMistralOCR.csproj
-
หากใช้ Visual Studio Code สามารถรันหรือ build โครงการได้ง่าย ๆ ด้วย VS Code Tasks:
- เปิด Command Palette (กด
F1หรือCmd+Shift+P) - เลือก
Tasks: Run Task - เลือก
Build OcrConsoleAppเพื่อ build หรือRun OcrConsoleAppเพื่อรันโปรแกรม
- เปิด Command Palette (กด
-
-
นำไฟล์ PDF หรือรูปภาพที่ต้องการแปลงไปไว้ในโฟลเดอร์
docs/input/ -
ผลลัพธ์จะถูกบันทึกไว้ในโฟลเดอร์
docs/output/
-
docs/input/
- ใช้สำหรับวางไฟล์ PDF หรือรูปภาพที่ต้องการแปลงข้อความ เช่น
1.Scanned.pdf,2.TablePure.pdfเป็นต้น - รองรับไฟล์ PDF หลายไฟล์ สามารถนำไฟล์ที่ต้องการประมวลผลมาใส่ไว้ในโฟลเดอร์นี้ได้เลย
- ใช้สำหรับวางไฟล์ PDF หรือรูปภาพที่ต้องการแปลงข้อความ เช่น
-
docs/output/
- จะสร้างโฟลเดอร์ย่อยตามชื่อไฟล์ต้นฉบับ เช่น
1.Scanned/,2.TablePure/เป็นต้น - ในแต่ละโฟลเดอร์ย่อย (เช่น
1.Scanned/) จะมีโฟลเดอร์ย่อยหลัก ๆ คือ0.SplitPdfToImages/: เก็บไฟล์ภาพ (.png) ที่แยกออกมาจากแต่ละหน้า PDF1.MistralOCR/: ภายในจะมีโฟลเดอร์ย่อยแยกตามหน้า เช่นpage-1/,page-2/...- ในแต่ละโฟลเดอร์ page-N จะมีไฟล์ผลลัพธ์ เช่น
page-N.md(ไฟล์ข้อความ Markdown ที่ได้จาก OCR)img-0.jpeg(หรือไฟล์ภาพอื่น ๆ ที่เกี่ยวข้องกับหน้านั้น)
- ในแต่ละโฟลเดอร์ page-N จะมีไฟล์ผลลัพธ์ เช่น
- ตัวอย่างเช่น หากมีไฟล์
4.TextWithTableWithImage.pdfใน docs/input จะได้โครงสร้างดังนี้:
- จะสร้างโฟลเดอร์ย่อยตามชื่อไฟล์ต้นฉบับ เช่น
docs/
├── input/
│ ├── 4.TextWithTableWithImage.pdf
│ └── ...
└── output/
└── 4.TextWithTableWithImage/
├── 0.SplitPdfToImages/
│ ├── 4.TextWithTableWithImage-1.png
│ └── ...
└── 1.MistralOCR/
├── page-1/
│ ├── page-1.md
│ └── img-0.jpeg
├── page-2/
│ ├── page-2.md
│ └── ...
└── ...
- docs/output จะจัดเก็บผลลัพธ์แยกตามไฟล์ต้นฉบับ โดยแต่ละไฟล์จะมีโฟลเดอร์สำหรับภาพที่แยกจาก PDF และโฟลเดอร์สำหรับผลลัพธ์ OCR ที่แยกตามหน้า
-
docs/input/
- วางไฟล์ PDF หรือรูปภาพที่ต้องการแปลง เช่น
- 1.Scanned.pdf
- 2.TablePure.pdf
- 3.Image.pdf
- 4.TextWithTableWithImage.pdf
- วางไฟล์ PDF หรือรูปภาพที่ต้องการแปลง เช่น
-
docs/output/
- จะมีโฟลเดอร์ย่อยตามชื่อไฟล์ต้นฉบับ เช่น
- 1.Scanned/
- 2.TablePure/
- 3.Image/
- 4.TextWithTableWithImage/
- ในแต่ละโฟลเดอร์ย่อยจะประกอบด้วย:
- 0.SplitPdfToImages/ (เก็บไฟล์ .png ที่แยกจากแต่ละหน้า PDF)
- 1.MistralOCR/ (แยกโฟลเดอร์ page-N สำหรับแต่ละหน้า เก็บ .md และภาพที่เกี่ยวข้อง)
- จะมีโฟลเดอร์ย่อยตามชื่อไฟล์ต้นฉบับ เช่น
สามารถแก้ไขค่าต่าง ๆ ได้ในไฟล์ POCMistralOCR/appsettings.json
MIT License