{"id":1608,"date":"2026-03-09T07:17:13","date_gmt":"2026-03-09T07:17:13","guid":{"rendered":"https:\/\/wiro.ai\/blog\/?p=1608"},"modified":"2026-03-08T07:19:53","modified_gmt":"2026-03-08T07:19:53","slug":"dots-ocr-1-5-ocr-in-6-screenshot-tests","status":"publish","type":"post","link":"https:\/\/wiro.ai\/blog\/dots-ocr-1-5-ocr-in-6-screenshot-tests\/","title":{"rendered":"dots.ocr-1.5: OCR in 6 Screenshot Tests"},"content":{"rendered":"<p>dots.ocr-1.5 targets OCR and document parsing with a single vision-language model. This post runs 6 screenshot-style tests and shows the raw extracted text. The goal stays simple: check punctuation, small text, tables, and rotated layouts.<\/p>\n<h2>Model<\/h2>\n<ul>\n<li><a href=\"https:\/\/wiro.ai\/models\/kristaller486\/dots-ocr-1-5\">kristaller486\/dots-ocr-1-5<\/a><\/li>\n<\/ul>\n<h2>Test rules<\/h2>\n<ul>\n<li>Prompt mode: OCR text extraction<\/li>\n<li>One image per test<\/li>\n<li>Outputs published as-is. No manual cleanup.<\/li>\n<\/ul>\n<h2>Results (6 tests)<\/h2>\n<h3>Test 1: clean paragraph<\/h3>\n<figure>\n  <img decoding=\"async\" src=\"https:\/\/wiro.ai\/blog\/wp-content\/uploads\/2026\/03\/dots-ocr-test-1.png\" alt=\"Synthetic OCR test image with a clean paragraph and date\" \/><figcaption>Prompt: Extract the text content from this image.<\/figcaption><\/figure>\n<pre># dots.ocr-1.5 OCR TEST 1\n\nMeeting notes\n\nDate: 2026-03-08\n\nAgenda: OCR tests for small text, tables, and rotated layouts.\n\nAction items: verify punctuation, numbers, and reading order.<\/pre>\n<p>Quick take: clean print text comes back in full, including dates and punctuation.<\/p>\n<h3>Test 2: small font and mixed tokens<\/h3>\n<figure>\n  <img decoding=\"async\" src=\"https:\/\/wiro.ai\/blog\/wp-content\/uploads\/2026\/03\/dots-ocr-test-2.png\" alt=\"Synthetic OCR test image with small font, numbers, email, and URL\" \/><figcaption>Prompt: Extract the text content from this image.<\/figcaption><\/figure>\n<pre># dots.ocr-1.5 OCR TEST 2\n\nThis paragraph uses smaller font size.\n\nIt includes punctuation: commas, periods, and colons.\n\nNumbers: 3.14159, 1,024, and 2026-03-08.\n\nEmail: demo@example.com\n\nURL: https:\/\/wiro.ai\/models<\/pre>\n<p>Quick take: small text stays readable. Tokens like email and URLs come back intact in this run.<\/p>\n<h3>Test 3: Latin multilingual line with accents<\/h3>\n<figure>\n  <img decoding=\"async\" src=\"https:\/\/wiro.ai\/blog\/wp-content\/uploads\/2026\/03\/dots-ocr-test-3.png\" alt=\"Synthetic OCR test image with Turkish and Spanish text lines\" \/><figcaption>Prompt: Extract the text content from this image.<\/figcaption><\/figure>\n<pre># dots.ocr-1.5 OCR TEST 3\n\nTurkish: Cagri bug\u00fcn Ankara&#x27;ya gitti. Saat 18:30&#x27;da donuyor.\n\nSpanish: Informacion basica: nino, corazon, accion, senor.\n\nNote: accents should stay intact when possible.<\/pre>\n<p>Quick take: the output keeps mixed-language lines and punctuation. Accent handling depends on the input font and rendering.<\/p>\n<h3>Test 4: table extraction<\/h3>\n<figure>\n  <img decoding=\"async\" src=\"https:\/\/wiro.ai\/blog\/wp-content\/uploads\/2026\/03\/dots-ocr-test-4.png\" alt=\"Synthetic OCR test image with a 3 column table and grid lines\" \/><figcaption>Prompt: Extract the text content from this image.<\/figcaption><\/figure>\n<p>Extracted output (model returned an HTML table):<\/p>\n<p># dots.ocr-1.5 OCR TEST 4<\/p>\n<table>\n<thead>\n<tr>\n<td>Item<\/td>\n<td>Qty<\/td>\n<td>Notes<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>USB-C cable<\/td>\n<td>2<\/td>\n<td>Black, 1m<\/td>\n<\/tr>\n<tr>\n<td>SSD 1TB<\/td>\n<td>1<\/td>\n<td>NVMe, Gen4<\/td>\n<\/tr>\n<tr>\n<td>Notebook<\/td>\n<td>3<\/td>\n<td>A5, ruled<\/td>\n<\/tr>\n<tr>\n<td>Coffee<\/td>\n<td>1<\/td>\n<td>Latte, oat milk<\/td>\n<\/tr>\n<tr>\n<td>Sticker pack<\/td>\n<td>5<\/td>\n<td>Wiro green<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Quick take: the model returns a structured table instead of a flat text dump. This helps downstream parsing.<\/p>\n<h3>Test 5: formula and code snippet<\/h3>\n<figure>\n  <img decoding=\"async\" src=\"https:\/\/wiro.ai\/blog\/wp-content\/uploads\/2026\/03\/dots-ocr-test-5.png\" alt=\"Synthetic OCR test image with a formula line and a short JavaScript snippet\" \/><figcaption>Prompt: Extract the text content from this image.<\/figcaption><\/figure>\n<pre># dots.ocr-1.5 OCR TEST 5\n\nFormula:\n\n$$E = m * c^2$$\n\n$$\n\\text{Integral } 0..1 \\text{ of } x^2 \\text{ dx} = 1\/3\n$$\n\nCode snippet:\n\n```javascript\nconst price = 19.99;\nif (price &gt; 10) {\n    console.log(&quot;OK&quot;);\n}\n```<\/pre>\n<p>Quick take: code blocks and math-like text appear with formatting. This can help when the output feeds a parser.<\/p>\n<h3>Test 6: rotated layout and low contrast<\/h3>\n<figure>\n  <img decoding=\"async\" src=\"https:\/\/wiro.ai\/blog\/wp-content\/uploads\/2026\/03\/dots-ocr-test-6.png\" alt=\"Synthetic OCR test image rotated with low contrast body text\" \/><figcaption>Prompt: Extract the text content from this image.<\/figcaption><\/figure>\n<pre># dots.ocr-1.5 OCR TEST 6\n\nRotated layout with low contrast text.\n\nThis test checks if OCR keeps words readable when the page is tilted by 10 degrees.<\/pre>\n<p>Quick take: the rotated page still extracts clean lines in this run. Low contrast can reduce reliability on harder photos.<\/p>\n<h2>Takeaways<\/h2>\n<ul>\n<li>Clean synthetic screenshots extract well with stable punctuation.<\/li>\n<li>Small-font tokens like emails and URLs can come back clean when the render stays sharp.<\/li>\n<li>Tables can return as structured HTML, which saves parsing work.<\/li>\n<li>Rotation and low contrast still need spot checks on real-world photos.<\/li>\n<\/ul>\n<h2>Try it<\/h2>\n<p><a href=\"https:\/\/wiro.ai\/models\/kristaller486\/dots-ocr-1-5\">Run dots.ocr-1.5<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>dots.ocr-1.5 targets OCR and document parsing with a single vision-language model. This post runs 6 screenshot-style tests and shows the raw extracted&hellip;<\/p>\n","protected":false},"author":4,"featured_media":1607,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[52],"tags":[131,106],"class_list":["post-1608","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-model-reviews","tag-image-to-text","tag-ocr"],"_links":{"self":[{"href":"https:\/\/wiro.ai\/blog\/wp-json\/wp\/v2\/posts\/1608","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wiro.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wiro.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wiro.ai\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/wiro.ai\/blog\/wp-json\/wp\/v2\/comments?post=1608"}],"version-history":[{"count":1,"href":"https:\/\/wiro.ai\/blog\/wp-json\/wp\/v2\/posts\/1608\/revisions"}],"predecessor-version":[{"id":1609,"href":"https:\/\/wiro.ai\/blog\/wp-json\/wp\/v2\/posts\/1608\/revisions\/1609"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wiro.ai\/blog\/wp-json\/wp\/v2\/media\/1607"}],"wp:attachment":[{"href":"https:\/\/wiro.ai\/blog\/wp-json\/wp\/v2\/media?parent=1608"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wiro.ai\/blog\/wp-json\/wp\/v2\/categories?post=1608"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wiro.ai\/blog\/wp-json\/wp\/v2\/tags?post=1608"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}