{"product_id":"ocr-tiếng-việt-với-claude-vision-trich-xuất-text-từ-hinh-ảnh-giữ-nguyen-dấu","title":"OCR tiếng Việt với Claude Vision — Trích xuất text từ hình ảnh giữ nguyên dấu","description":"\n\u003cp\u003eTiếng Việt là ngôn ngữ có hệ thống dấu phức tạp bậc nhất thế giới. Một chữ cái như \"ô\" có thể mang thêm dấu thanh thành \"ổ\", \"ỗ\", \"ố\", \"ồ\", \"ộ\" — tổng cộng 5 biến thể chỉ từ một ký tự gốc. Hệ thống này tạo ra thách thức lớn cho bất kỳ công nghệ OCR (Optical Character Recognition) nào khi cần nhận dạng văn bản tiếng Việt từ hình ảnh. Trong bài viết này, chúng ta sẽ khám phá cách Claude Vision giải quyết bài toán OCR tiếng Việt, so sánh với các giải pháp truyền thống, và xây dựng pipeline trích xuất văn bản hoàn chỉnh.\u003c\/p\u003e\n\n\u003ch2\u003eThách thức OCR tiếng Việt: Tại sao dấu quan trọng?\u003c\/h2\u003e\n\u003cp\u003eTiếng Việt sử dụng bảng chữ cái Latin mở rộng với 12 nguyên âm đặc biệt (ă, â, ê, ô, ơ, ư, và các biến thể viết hoa) kết hợp với 5 dấu thanh (sắc, huyền, hỏi, ngã, nặng). Điều này tạo ra hơn 130 ký tự có dấu khác nhau. Sai một dấu có thể thay đổi hoàn toàn nghĩa của từ:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003ema\u003c\/strong\u003e (con ma) vs \u003cstrong\u003emá\u003c\/strong\u003e (mẹ) vs \u003cstrong\u003emà\u003c\/strong\u003e (liên từ) vs \u003cstrong\u003emả\u003c\/strong\u003e (mộ) vs \u003cstrong\u003emã\u003c\/strong\u003e (ngựa) vs \u003cstrong\u003emạ\u003c\/strong\u003e (lúa non)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003ebán\u003c\/strong\u003e (sell) vs \u003cstrong\u003ebàn\u003c\/strong\u003e (table) vs \u003cstrong\u003ebản\u003c\/strong\u003e (version)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003ecải\u003c\/strong\u003e (rau cải) vs \u003cstrong\u003ecãi\u003c\/strong\u003e (cãi nhau) vs \u003cstrong\u003ecài\u003c\/strong\u003e (cài đặt)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eVới các hệ thống OCR truyền thống, việc phân biệt chính xác giữa dấu hỏi và dấu ngã — hai dấu thanh có hình dạng gần giống nhau — là thách thức lớn nhất. Sai sót này không chỉ gây khó chịu mà còn có thể dẫn đến hậu quả nghiêm trọng trong các tài liệu pháp lý, hóa đơn tài chính, và giấy tờ hành chính.\u003c\/p\u003e\n\n\u003ch2\u003eSo sánh Claude Vision với Tesseract và EasyOCR\u003c\/h2\u003e\n\u003cp\u003eTrước khi đi vào chi tiết, hãy so sánh ba giải pháp OCR phổ biến khi xử lý tiếng Việt:\u003c\/p\u003e\n\n\u003ch3\u003eTesseract OCR\u003c\/h3\u003e\n\u003cp\u003eTesseract là engine OCR mã nguồn mở phổ biến nhất, được Google phát triển. Với tiếng Việt, Tesseract yêu cầu cài đặt gói ngôn ngữ riêng (vie.traineddata) và thường gặp vấn đề sau:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eNhầm lẫn dấu hỏi\/ngã với tỷ lệ lỗi 15-25% tùy chất lượng ảnh\u003c\/li\u003e\n  \u003cli\u003eKhó xử lý font chữ viết tay hoặc font trang trí\u003c\/li\u003e\n  \u003cli\u003eCần tiền xử lý ảnh (threshold, deskew) để đạt độ chính xác chấp nhận được\u003c\/li\u003e\n  \u003cli\u003eKhông hiểu ngữ cảnh — không thể tự sửa lỗi dựa trên ngữ nghĩa\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eEasyOCR\u003c\/h3\u003e\n\u003cp\u003eEasyOCR sử dụng deep learning và hỗ trợ tiếng Việt tốt hơn Tesseract trong nhiều trường hợp. Tuy nhiên vẫn tồn tại hạn chế:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eTỷ lệ lỗi dấu thanh giảm xuống 8-15% nhưng vẫn chưa đủ tốt cho tài liệu quan trọng\u003c\/li\u003e\n  \u003cli\u003eTốc độ chậm hơn Tesseract đáng kể khi chạy trên CPU\u003c\/li\u003e\n  \u003cli\u003eYêu cầu GPU để đạt tốc độ xử lý chấp nhận được\u003c\/li\u003e\n  \u003cli\u003eKhông có khả năng hiểu bối cảnh hoặc cấu trúc tài liệu\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eClaude Vision\u003c\/h3\u003e\n\u003cp\u003eClaude Vision tiếp cận bài toán OCR từ góc nhìn khác biệt hoàn toàn. Thay vì nhận dạng từng ký tự rồi ghép lại, Claude hiểu toàn bộ ngữ cảnh của tài liệu:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eTỷ lệ lỗi dấu thanh dưới 2% nhờ hiểu ngữ cảnh và ngữ nghĩa\u003c\/li\u003e\n  \u003cli\u003eTự động sửa lỗi dựa trên ngữ cảnh — nếu \"hỏi\" hay \"ngã\" hợp lý hơn trong câu\u003c\/li\u003e\n  \u003cli\u003eXử lý được nhiều loại font, bao gồm chữ viết tay\u003c\/li\u003e\n  \u003cli\u003eHiểu cấu trúc tài liệu: bảng, danh sách, tiêu đề, chú thích\u003c\/li\u003e\n  \u003cli\u003eCó thể trích xuất và tổ chức thông tin theo format mong muốn\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eXây dựng pipeline OCR tiếng Việt với Claude Vision\u003c\/h2\u003e\n\u003cp\u003ePipeline cơ bản gồm ba bước: nhận ảnh đầu vào, gửi đến Claude Vision qua API, và xử lý kết quả đầu ra. Dưới đây là cách triển khai từng bước.\u003c\/p\u003e\n\n\u003ch3\u003eBước 1: Chuẩn bị và gửi ảnh đến Claude API\u003c\/h3\u003e\n\u003cp\u003eClaude Vision chấp nhận ảnh ở các định dạng JPEG, PNG, GIF và WebP. Kích thước tối đa là 20MB. Bạn có thể gửi ảnh dạng base64 hoặc URL trực tiếp.\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eimport anthropic\nimport base64\nfrom pathlib import Path\n\nclient = anthropic.Anthropic()\n\ndef ocr_vietnamese(image_path: str, output_format: str = \"text\") -\u0026gt; str:\n    \"\"\"\n    Trích xuất văn bản tiếng Việt từ hình ảnh.\n\n    Args:\n        image_path: Đường dẫn đến file ảnh\n        output_format: \"text\" (plain text), \"markdown\", hoặc \"json\"\n\n    Returns:\n        Văn bản trích xuất từ ảnh\n    \"\"\"\n    image_data = Path(image_path).read_bytes()\n    base64_image = base64.standard_b64encode(image_data).decode(\"utf-8\")\n\n    media_type = \"image\/jpeg\"\n    if image_path.endswith(\".png\"):\n        media_type = \"image\/png\"\n    elif image_path.endswith(\".webp\"):\n        media_type = \"image\/webp\"\n\n    format_instruction = {\n        \"text\": \"Trả về plain text, giữ nguyên cấu trúc đoạn văn.\",\n        \"markdown\": \"Trả về dạng Markdown với heading, list, table nếu có.\",\n        \"json\": \"Trả về JSON với các trường phù hợp với loại tài liệu.\"\n    }\n\n    message = client.messages.create(\n        model=\"claude-sonnet-4-20250514\",\n        max_tokens=4096,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\n                        \"type\": \"image\",\n                        \"source\": {\n                            \"type\": \"base64\",\n                            \"media_type\": media_type,\n                            \"data\": base64_image,\n                        },\n                    },\n                    {\n                        \"type\": \"text\",\n                        \"text\": f\"\"\"Hãy trích xuất toàn bộ văn bản tiếng Việt từ hình ảnh này.\nYêu cầu quan trọng:\n- Giữ nguyên chính xác tất cả dấu thanh và dấu phụ tiếng Việt\n- Không tự ý thay đổi hoặc sửa chữa nội dung\n- Nếu không đọc rõ ký tự nào, đánh dấu bằng [?]\n- {format_instruction[output_format]}\"\"\"\n                    }\n                ],\n            }\n        ],\n    )\n\n    return message.content[0].text\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eBước 2: Xử lý kết quả và xác thực\u003c\/h3\u003e\n\u003cp\u003eSau khi nhận kết quả từ Claude, bạn nên thêm bước xác thực để đảm bảo chất lượng:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eimport re\n\ndef validate_vietnamese_text(text: str) -\u0026gt; dict:\n    \"\"\"\n    Kiểm tra chất lượng văn bản tiếng Việt trích xuất.\n\n    Returns:\n        Dict chứa các chỉ số chất lượng\n    \"\"\"\n    total_chars = len(text)\n\n    # Đếm ký tự có dấu tiếng Việt\n    vn_diacritics = re.findall(\n        r'[àáảãạăắằẳẵặâấầẩẫậèéẻẽẹêếềểễệìíỉĩịòóỏõọôốồổỗộơớờởỡợùúủũụưứừửữựỳýỷỹỵđ]',\n        text.lower()\n    )\n    diacritic_ratio = len(vn_diacritics) \/ total_chars if total_chars \u0026gt; 0 else 0\n\n    # Đếm ký tự không đọc được\n    uncertain_count = text.count('[?]')\n\n    # Văn bản tiếng Việt thông thường có khoảng 25-40% ký tự có dấu\n    quality = \"cao\"\n    if diacritic_ratio \u0026lt; 0.15:\n        quality = \"thấp - có thể thiếu dấu\"\n    elif uncertain_count \u0026gt; 5:\n        quality = \"trung bình - nhiều ký tự không rõ\"\n\n    return {\n        \"total_chars\": total_chars,\n        \"diacritic_chars\": len(vn_diacritics),\n        \"diacritic_ratio\": round(diacritic_ratio, 3),\n        \"uncertain_chars\": uncertain_count,\n        \"quality\": quality\n    }\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eTrích xuất dữ liệu từ các loại tài liệu phổ biến\u003c\/h2\u003e\n\n\u003ch3\u003eTrích xuất hóa đơn (Invoice)\u003c\/h3\u003e\n\u003cp\u003eHóa đơn VAT, hóa đơn điện tử, và các chứng từ tài chính là loại tài liệu được OCR nhiều nhất tại Việt Nam. Claude Vision có thể trích xuất dữ liệu có cấu trúc từ hóa đơn:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eHãy trích xuất thông tin từ hóa đơn trong hình ảnh này thành JSON với cấu trúc sau:\n{\n  \"so_hoa_don\": \"\",\n  \"ngay_lap\": \"\",\n  \"don_vi_ban\": {\n    \"ten\": \"\",\n    \"ma_so_thue\": \"\",\n    \"dia_chi\": \"\"\n  },\n  \"don_vi_mua\": {\n    \"ten\": \"\",\n    \"ma_so_thue\": \"\",\n    \"dia_chi\": \"\"\n  },\n  \"hang_hoa\": [\n    {\n      \"ten\": \"\",\n      \"don_vi\": \"\",\n      \"so_luong\": 0,\n      \"don_gia\": 0,\n      \"thanh_tien\": 0\n    }\n  ],\n  \"tong_tien_truoc_thue\": 0,\n  \"thue_vat\": 0,\n  \"tong_tien_thanh_toan\": 0,\n  \"so_tien_bang_chu\": \"\"\n}\n\nLưu ý:\n- Giữ nguyên chính xác dấu tiếng Việt trong tên, địa chỉ\n- Số tiền trả về dạng số nguyên (đơn vị VND)\n- Nếu trường nào không có trên hóa đơn, để giá trị null\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003ePrompt này yêu cầu Claude trả về dữ liệu có cấu trúc, giúp bạn tích hợp trực tiếp vào hệ thống kế toán hoặc ERP mà không cần xử lý thêm. Điểm mạnh của Claude so với OCR truyền thống là khả năng hiểu ngữ cảnh — ví dụ, phân biệt được \"đơn vị bán\" và \"đơn vị mua\" dù layout hóa đơn có thể khác nhau giữa các nhà cung cấp.\u003c\/p\u003e\n\n\u003ch3\u003eTrích xuất CMND\/CCCD\u003c\/h3\u003e\n\u003cp\u003eXử lý giấy tờ tùy thân là nhu cầu lớn trong lĩnh vực eKYC (electronic Know Your Customer). Claude Vision có thể trích xuất thông tin từ CMND và CCCD với độ chính xác cao:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eHãy trích xuất thông tin từ CMND\/CCCD trong hình ảnh.\n\nTrả về JSON:\n{\n  \"loai_giay_to\": \"CMND hoặc CCCD\",\n  \"so\": \"\",\n  \"ho_ten\": \"\",\n  \"ngay_sinh\": \"\",\n  \"gioi_tinh\": \"\",\n  \"quoc_tich\": \"\",\n  \"que_quan\": \"\",\n  \"noi_thuong_tru\": \"\",\n  \"ngay_cap\": \"\",\n  \"noi_cap\": \"\",\n  \"co_het_han\": true\/false,\n  \"ngay_het_han\": \"\"\n}\n\nQuan trọng:\n- Họ tên phải giữ nguyên chính xác dấu tiếng Việt\n- Địa chỉ ghi đầy đủ như trên giấy tờ\n- Nếu ảnh mờ hoặc bị che một phần, ghi rõ trường nào không đọc được\n- KHÔNG bịa thông tin nếu không đọc rõ\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eTrích xuất hợp đồng\u003c\/h3\u003e\n\u003cp\u003eHợp đồng thường dài nhiều trang, chứa nhiều thuật ngữ pháp lý và thông tin quan trọng. Claude Vision giúp trích xuất các điểm chính từ hợp đồng một cách hiệu quả. Lưu ý rằng với tài liệu nhiều trang, bạn cần gửi từng trang hoặc sử dụng PDF reader trước rồi kết hợp với Claude.\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eHãy trích xuất các thông tin quan trọng từ trang hợp đồng này:\n\n1. Các bên tham gia (tên, địa chỉ, người đại diện, chức vụ)\n2. Đối tượng hợp đồng (dịch vụ\/sản phẩm gì)\n3. Giá trị hợp đồng và phương thức thanh toán\n4. Thời hạn hợp đồng (ngày bắt đầu, ngày kết thúc)\n5. Các điều khoản đặc biệt (phạt vi phạm, bảo hành, bảo mật)\n6. Điều kiện chấm dứt hợp đồng\n\nGiữ nguyên chính xác dấu tiếng Việt.\nNếu trang này không chứa thông tin nào trong các mục trên, ghi \"Không có trên trang này\".\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eXử lý hình ảnh chất lượng thấp\u003c\/h2\u003e\n\u003cp\u003eTrong thực tế, nhiều ảnh chụp tài liệu có chất lượng không tốt: mờ, nghiêng, thiếu sáng, hoặc bị che khuất một phần. Claude Vision xử lý được nhiều trường hợp khó, nhưng bạn nên có chiến lược error handling phù hợp.\u003c\/p\u003e\n\n\u003ch3\u003ePhát hiện và xử lý ảnh mờ\u003c\/h3\u003e\n\u003cp\u003eTrước khi gửi ảnh đến Claude, bạn có thể kiểm tra độ nét bằng Laplacian variance:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eimport cv2\nimport numpy as np\n\ndef check_image_quality(image_path: str) -\u0026gt; dict:\n    \"\"\"\n    Kiểm tra chất lượng ảnh trước khi OCR.\n    \"\"\"\n    img = cv2.imread(image_path)\n    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\n\n    # Laplacian variance - chỉ số độ nét\n    laplacian_var = cv2.Laplacian(gray, cv2.CV_64F).var()\n\n    # Kiểm tra độ sáng\n    brightness = np.mean(gray)\n\n    # Kiểm tra độ tương phản\n    contrast = np.std(gray)\n\n    issues = []\n    if laplacian_var \u0026lt; 100:\n        issues.append(\"Ảnh mờ - kết quả OCR có thể không chính xác\")\n    if brightness \u0026lt; 50:\n        issues.append(\"Ảnh quá tối - cần tăng sáng\")\n    elif brightness \u0026gt; 200:\n        issues.append(\"Ảnh quá sáng - có thể mất chi tiết\")\n    if contrast \u0026lt; 30:\n        issues.append(\"Độ tương phản thấp - khó phân biệt chữ và nền\")\n\n    return {\n        \"sharpness\": round(laplacian_var, 2),\n        \"brightness\": round(brightness, 2),\n        \"contrast\": round(contrast, 2),\n        \"issues\": issues,\n        \"recommendation\": \"Chụp lại ảnh\" if len(issues) \u0026gt; 1 else \"Có thể xử lý\"\n    }\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eChiến lược retry thông minh\u003c\/h3\u003e\n\u003cp\u003eKhi ảnh có chất lượng không tốt, bạn có thể yêu cầu Claude cố gắng đọc với mức độ chắc chắn khác nhau:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003edef ocr_with_confidence(image_path: str) -\u0026gt; dict:\n    \"\"\"\n    OCR với mức độ tin cậy cho từng phần văn bản.\n    \"\"\"\n    image_data = Path(image_path).read_bytes()\n    base64_image = base64.standard_b64encode(image_data).decode(\"utf-8\")\n\n    message = client.messages.create(\n        model=\"claude-sonnet-4-20250514\",\n        max_tokens=4096,\n        messages=[\n            {\n                \"role\": \"user\",\n                \"content\": [\n                    {\n                        \"type\": \"image\",\n                        \"source\": {\n                            \"type\": \"base64\",\n                            \"media_type\": \"image\/jpeg\",\n                            \"data\": base64_image,\n                        },\n                    },\n                    {\n                        \"type\": \"text\",\n                        \"text\": \"\"\"Trích xuất văn bản tiếng Việt từ ảnh này.\nVới mỗi đoạn văn bản, đánh giá mức độ tin cậy:\n- CAO: đọc rõ ràng, chắc chắn đúng\n- TRUNG BINH: đọc được nhưng có thể sai 1-2 ký tự\n- THAP: khó đọc, nhiều ký tự không chắc chắn\n\nTrả về JSON:\n[\n  {\"text\": \"nội dung\", \"confidence\": \"CAO\/TRUNG BINH\/THAP\", \"notes\": \"ghi chú nếu có\"}\n]\"\"\"\n                    }\n                ],\n            }\n        ],\n    )\n\n    return message.content[0].text\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eXử lý hàng loạt (Batch Processing)\u003c\/h2\u003e\n\u003cp\u003eKhi cần OCR số lượng lớn tài liệu, bạn nên sử dụng Anthropic Batch API để tối ưu chi phí (giảm 50%) và throughput:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eimport anthropic\nimport json\n\ndef create_batch_ocr(image_paths: list[str]) -\u0026gt; str:\n    \"\"\"\n    Tạo batch request để OCR nhiều ảnh cùng lúc.\n    \"\"\"\n    client = anthropic.Anthropic()\n\n    requests = []\n    for i, path in enumerate(image_paths):\n        image_data = Path(path).read_bytes()\n        base64_image = base64.standard_b64encode(image_data).decode(\"utf-8\")\n\n        media_type = \"image\/jpeg\"\n        if path.endswith(\".png\"):\n            media_type = \"image\/png\"\n\n        requests.append({\n            \"custom_id\": f\"ocr_{i}_{Path(path).stem}\",\n            \"params\": {\n                \"model\": \"claude-sonnet-4-20250514\",\n                \"max_tokens\": 4096,\n                \"messages\": [\n                    {\n                        \"role\": \"user\",\n                        \"content\": [\n                            {\n                                \"type\": \"image\",\n                                \"source\": {\n                                    \"type\": \"base64\",\n                                    \"media_type\": media_type,\n                                    \"data\": base64_image,\n                                },\n                            },\n                            {\n                                \"type\": \"text\",\n                                \"text\": \"Trích xuất toàn bộ văn bản tiếng Việt, giữ nguyên dấu.\"\n                            }\n                        ],\n                    }\n                ],\n            }\n        })\n\n    batch = client.messages.batches.create(requests=requests)\n    return batch.id\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eTối ưu chi phí và hiệu suất\u003c\/h2\u003e\n\u003cp\u003eClaude Vision tính phí dựa trên kích thước ảnh (token). Một số mẹo giúp tối ưu chi phí:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eResize ảnh:\u003c\/strong\u003e Claude tự động resize, nhưng gửi ảnh nhỏ hơn giúp giảm token. Với tài liệu A4, kích thước 1500x2100 pixel là đủ.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCrop vùng cần thiết:\u003c\/strong\u003e Nếu chỉ cần OCR một phần tài liệu, crop trước khi gửi.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eDùng Haiku cho ảnh rõ:\u003c\/strong\u003e Với ảnh chất lượng cao, chữ in rõ ràng, Claude Haiku cho kết quả tốt với chi phí thấp hơn nhiều.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eBatch API:\u003c\/strong\u003e Giảm 50% chi phí khi không cần kết quả ngay lập tức.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eSo sánh kết quả thực tế\u003c\/h2\u003e\n\u003cp\u003eDưới đây là kết quả OCR một đoạn văn bản tiếng Việt từ hình chụp tài liệu in chất lượng trung bình. Văn bản gốc chứa nhiều dấu thanh và thuật ngữ chuyên ngành:\u003c\/p\u003e\n\u003cp\u003eVăn bản gốc: \"Theo Nghị định số 123\/2020\/NĐ-CP ngày 19 tháng 10 năm 2020 của Chính phủ quy định về hóa đơn, chứng từ, các tổ chức kinh doanh phải chuyển đổi sang hóa đơn điện tử trước ngày 01\/07\/2022.\"\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eTesseract:\u003c\/strong\u003e \"Theo Nghi dinh so 123\/2020\/ND-CP ngay 19 thang 10 nam 2020 cua Chinh phu quy dinh ve hoa don, chung tu...\" — mất gần hết dấu\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eEasyOCR:\u003c\/strong\u003e \"Theo Nghị định số 123\/2020\/NĐ-CP ngày 19 tháng 10 năm 2020 của Chính phủ quy định về hóa đơn, chưng từ...\" — sai \"chứng\" thành \"chưng\"\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eClaude Vision:\u003c\/strong\u003e Trích xuất chính xác 100%, bao gồm cả số hiệu văn bản và dấu thanh\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eTích hợp vào quy trình thực tế\u003c\/h2\u003e\n\u003cp\u003eDưới đây là một pipeline hoàn chỉnh kết hợp kiểm tra chất lượng, OCR, và xác thực kết quả:\u003c\/p\u003e\n\u003cpre\u003e\u003ccode\u003eimport anthropic\nimport base64\nimport json\nfrom pathlib import Path\n\nclass VietnameseOCRPipeline:\n    def __init__(self):\n        self.client = anthropic.Anthropic()\n\n    def process_document(self, image_path: str, doc_type: str = \"general\") -\u0026gt; dict:\n        \"\"\"\n        Pipeline xử lý tài liệu tiếng Việt hoàn chỉnh.\n\n        Args:\n            image_path: Đường dẫn ảnh\n            doc_type: \"general\", \"invoice\", \"id_card\", \"contract\"\n        \"\"\"\n        # Bước 1: Kiểm tra chất lượng ảnh\n        quality = check_image_quality(image_path)\n        if quality[\"recommendation\"] == \"Chụp lại ảnh\":\n            return {\n                \"success\": False,\n                \"error\": \"Chất lượng ảnh quá thấp\",\n                \"issues\": quality[\"issues\"]\n            }\n\n        # Bước 2: Chọn prompt phù hợp theo loại tài liệu\n        prompts = {\n            \"general\": \"Trích xuất toàn bộ văn bản tiếng Việt, giữ nguyên dấu và cấu trúc.\",\n            \"invoice\": self._get_invoice_prompt(),\n            \"id_card\": self._get_id_card_prompt(),\n            \"contract\": self._get_contract_prompt()\n        }\n\n        # Bước 3: Gửi đến Claude Vision\n        image_data = Path(image_path).read_bytes()\n        base64_image = base64.standard_b64encode(image_data).decode(\"utf-8\")\n\n        message = self.client.messages.create(\n            model=\"claude-sonnet-4-20250514\",\n            max_tokens=4096,\n            messages=[\n                {\n                    \"role\": \"user\",\n                    \"content\": [\n                        {\n                            \"type\": \"image\",\n                            \"source\": {\n                                \"type\": \"base64\",\n                                \"media_type\": \"image\/jpeg\",\n                                \"data\": base64_image,\n                            },\n                        },\n                        {\"type\": \"text\", \"text\": prompts[doc_type]}\n                    ],\n                }\n            ],\n        )\n\n        result = message.content[0].text\n\n        # Bước 4: Xác thực kết quả\n        validation = validate_vietnamese_text(result)\n\n        return {\n            \"success\": True,\n            \"text\": result,\n            \"quality\": validation,\n            \"image_quality\": quality,\n            \"tokens_used\": message.usage.input_tokens + message.usage.output_tokens\n        }\n\n    def _get_invoice_prompt(self):\n        return \"Trích xuất thông tin hóa đơn thành JSON có cấu trúc...\"\n\n    def _get_id_card_prompt(self):\n        return \"Trích xuất thông tin CMND\/CCCD thành JSON...\"\n\n    def _get_contract_prompt(self):\n        return \"Trích xuất các điều khoản quan trọng từ hợp đồng...\"\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eLưu ý quan trọng khi sử dụng\u003c\/h2\u003e\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eBảo mật dữ liệu:\u003c\/strong\u003e Khi xử lý CMND, CCCD, hoặc tài liệu nhạy cảm, hãy đảm bảo tuân thủ quy định bảo vệ dữ liệu cá nhân theo Nghị định 13\/2023\/NĐ-CP.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eKhông dùng cho xác thực pháp lý:\u003c\/strong\u003e Kết quả OCR nên được kiểm tra lại bởi con người trước khi sử dụng trong các quy trình pháp lý.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eGiới hạn kích thước:\u003c\/strong\u003e Mỗi request chỉ nên gửi 1-2 ảnh để đảm bảo chất lượng và tránh vượt giới hạn token.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eEncoding UTF-8:\u003c\/strong\u003e Luôn đảm bảo output được lưu trữ và truyền tải với encoding UTF-8 để tránh mất dấu tiếng Việt.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eBước tiếp theo\u003c\/h2\u003e\n\u003cp\u003eClaude Vision mang đến giải pháp OCR tiếng Việt vượt trội so với các công cụ truyền thống, đặc biệt trong việc giữ nguyên dấu thanh và hiểu ngữ cảnh. Để tìm hiểu thêm về cách sử dụng Claude cho các tác vụ xử lý ngôn ngữ tiếng Việt khác, hãy khám phá thêm tại \u003ca href=\"\/collections\/nen-tang\"\u003eThư viện Nền tảng Claude\u003c\/a\u003e.\u003c\/p\u003e\n","brand":"Minh Tuấn","offers":[{"title":"Default Title","offer_id":47730164465876,"sku":null,"price":0.0,"currency_code":"VND","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0821\/0264\/9044\/files\/ocr-ti_ng-vi_t-v_i-claude-vision-trich-xu_t-text-t_-hinh-_nh-gi_-nguyen-d_u.jpg?v=1774716345","url":"https:\/\/claude.vn\/products\/ocr-ti%e1%ba%bfng-vi%e1%bb%87t-v%e1%bb%9bi-claude-vision-trich-xu%e1%ba%a5t-text-t%e1%bb%ab-hinh-%e1%ba%a3nh-gi%e1%bb%af-nguyen-d%e1%ba%a5u","provider":"CLAUDE.VN","version":"1.0","type":"link"}