Skip to content

Image DLP

Image DLP extends the Arbitex content security platform to handle uploaded images and image-only PDF pages. Text is extracted via OCR, then fed directly into the existing 5-tier DLP pipeline — the same TF-IDF, regex, NER, DeBERTa, and CredInt stages that process any other content. No separate policy configuration is required.

Typical targets: screenshots containing credentials, scanned contracts, photographed credit cards, whiteboard photos with architecture diagrams, and faxed compliance documents ingested as PDFs.


When a file arrives through any channel module (AI Gateway, Email Relay, File Inspector, AppGuard), the pipeline checks MIME type before invoking OCR. For PDFs, the pipeline first attempts native text extraction; only pages with no detectable text layer are rendered to images and passed to OCR.

File Upload
|
v
MIME Detection
|
+-- text/* or application/pdf (text layer) --> standard DLP pipeline
|
+-- image/png, image/jpeg, image/tiff,
| image/bmp, image/webp,
| application/pdf (image-only pages)
| |
| v
| OCR Extraction
| (Azure AI Vision or Tesseract)
| |
| v
| Extracted Text
| |
| v
| +-- Tier 1: Regex Rules ---------> findings (source: "image_ocr")
| |
| +-- Tier 2: NER Gate -----------> findings (source: "image_ocr")
| |
| +-- Tier 3: DeBERTa Classifier -> findings (source: "image_ocr")
| |
| v
| Quarantine if findings detected
|
v
Audit Log (file.image_ocr event)

For mixed PDFs, text-extractable pages are processed inline. Image-only pages are batched to the OCR provider, extracted, and rejoined before the unified finding set is evaluated against policy.

The source field on each finding is set to "image_ocr" so findings from image content are distinguishable in the audit log from findings on text content in the same file.


Image OCR is disabled by default. All settings are per-org and managed through the admin config API at /api/v1/admin/config/{key}.

See the Admin Operations Guide for general config API usage.

Enables or disables OCR-based image scanning for the org.

Default: false

Terminal window
# Read current value
curl -s -H "Authorization: Bearer $ADMIN_TOKEN" \
https://api.arbitex.ai/api/v1/admin/config/image_ocr_enabled
# Enable
curl -s -X PUT \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"value": true}' \
https://api.arbitex.ai/api/v1/admin/config/image_ocr_enabled

Selects the OCR backend. Accepted values: "azure" (Azure AI Vision) or "tesseract" (local Tesseract engine).

  • "azure" — default for SaaS deployments. Requires the AZURE_AI_VISION_ENDPOINT and AZURE_AI_VISION_KEY secrets to be configured. See BYOK Configuration.
  • "tesseract" — default for outpost (on-prem) deployments. Runs entirely within the outpost process; no network egress.

Default: "azure" (SaaS), "tesseract" (outpost)

Terminal window
# Read current provider
curl -s -H "Authorization: Bearer $ADMIN_TOKEN" \
https://api.arbitex.ai/api/v1/admin/config/image_ocr_provider
# Set to tesseract
curl -s -X PUT \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"value": "tesseract"}' \
https://api.arbitex.ai/api/v1/admin/config/image_ocr_provider

Files exceeding this size are skipped by OCR. The file is still processed by standard DLP if it contains a text layer. Skipped files generate an ocr_skipped reason in the audit event.

Default: 20 (MB)

Terminal window
# Read current limit
curl -s -H "Authorization: Bearer $ADMIN_TOKEN" \
https://api.arbitex.ai/api/v1/admin/config/image_ocr_max_file_size_mb
# Set to 50 MB
curl -s -X PUT \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"value": 50}' \
https://api.arbitex.ai/api/v1/admin/config/image_ocr_max_file_size_mb

Per-file OCR timeout. If the OCR provider does not return within this window, the file is flagged with an ocr_timeout error in the audit log and the file is quarantined pending manual review.

Default: 30 (seconds)

Terminal window
# Read current timeout
curl -s -H "Authorization: Bearer $ADMIN_TOKEN" \
https://api.arbitex.ai/api/v1/admin/config/image_ocr_timeout_seconds
# Set to 60 seconds
curl -s -X PUT \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"value": 60}' \
https://api.arbitex.ai/api/v1/admin/config/image_ocr_timeout_seconds

Format MIME Type Notes
PNG image/png Full support; lossless preferred for screenshots
JPEG image/jpeg Compression artifacts may reduce OCR accuracy at low quality settings
TIFF image/tiff Common in scanned document workflows; multi-page TIFF supported
BMP image/bmp Uncompressed; large file sizes trigger size limit check first
WebP image/webp Lossy and lossless variants both accepted
PDF (image-only pages) application/pdf Pages are rendered at 150 DPI before OCR; up to 50 pages per file

PDF pages with a native text layer are not re-OCR’d — text is extracted directly and is faster. Only pages where text extraction yields zero characters are sent to the OCR provider.


Findings produced from OCR-extracted text flow through the same 5-tier pipeline and are written to the same audit log as text-based findings. The source field distinguishes their origin.

Example finding:

{
"finding_id": "fnd_01j3kx9ab2e7f4gh5m6n7p8q",
"file_id": "fil_01j3kx7cd3e8f5hi6j7k8l9m",
"tier": "ner",
"label": "CREDIT_CARD_NUMBER",
"confidence": 0.97,
"source": "image_ocr",
"ocr_provider": "azure",
"page": 2,
"char_offset": 142,
"char_length": 19,
"redacted_excerpt": "Card ending in [REDACTED]",
"policy_action": "quarantine",
"created_at": "2026-04-01T14:22:10.441Z"
}

The page field is populated for PDF files. For single-image uploads it is null. The char_offset and char_length refer to positions within the OCR-extracted text string, not the original binary file.

Policy actions (quarantine, redact, allow, block) apply identically to image OCR findings as to text findings. Configure rules in the DLP Pipeline Configuration Guide.


Every OCR operation — whether it produces findings or not — emits a file.image_ocr audit event.

Event fields:

Field Type Description
file_id string Unique file identifier
ocr_provider string "azure" or "tesseract"
text_length integer Total characters extracted across all pages
page_count integer Number of pages sent to OCR (image-only pages only for PDFs)
latency_ms integer Total OCR round-trip time in milliseconds
finding_count integer Number of DLP findings produced from OCR text

Example event:

{
"event_type": "file.image_ocr",
"event_id": "evt_01j3kx9yz4a5b6cd7e8f9g0h",
"org_id": "org_01j2ab3cd4e5f6gh7i8j9k0l",
"actor": "user_01j2mn3op4q5r6st7u8v9w0x",
"timestamp": "2026-04-01T14:22:10.112Z",
"file_id": "fil_01j3kx7cd3e8f5hi6j7k8l9m",
"file_name": "q1-expense-report.pdf",
"ocr_provider": "azure",
"text_length": 3821,
"page_count": 3,
"latency_ms": 1247,
"finding_count": 2,
"status": "complete",
"hmac": "v1:sha256:4e9a1c2d..."
}

If OCR was skipped due to file size, status is "skipped" and ocr_skipped_reason is "file_size_exceeded". If OCR timed out, status is "error" and ocr_error is "timeout".

Audit events are HMAC-chained using the same chain as all other platform audit events. See the Admin Operations Guide for audit export and verification procedures.


When the image_ocr_provider is set to "tesseract", the OCR engine runs inside the outpost process. Extracted text never leaves the local network. This is the recommended configuration for air-gapped environments and organizations with data residency requirements.

When using "azure", images are transmitted to Azure AI Vision endpoints for processing. Data leaves the outpost network boundary. Review your data processing agreements before enabling Azure OCR in regulated environments.

The outpost reads OCR configuration from the same config mirror as other per-org settings. No separate outpost configuration file is required. Config changes made via /api/v1/admin/config/{key} propagate to the outpost on the next sync cycle (default: 60 seconds).

Outpost-specific config keys (image_ocr_provider, image_ocr_timeout_seconds) can also be overridden locally in the outpost config file if the outpost operates in isolated mode without a live platform connection.


  • Handwritten text: Recognition accuracy for handwriting varies significantly. "azure" provides better handwriting support than "tesseract". Neither provider guarantees detection of all handwritten sensitive data.
  • Low-resolution images: Images below approximately 72 DPI may produce poor extraction results. The platform does not automatically upscale images before OCR.
  • Large image-only PDFs: PDFs with many image-only pages increase pipeline latency proportionally. The maximum supported page count for OCR is 50 pages per file; additional pages are skipped and noted in the audit event.
  • OCR latency: OCR adds 200–800 ms of latency per page depending on provider and image complexity. "tesseract" is generally slower than "azure" for complex layouts. Size the image_ocr_timeout_seconds value accordingly for your document profiles.
  • Encrypted PDFs: Password-protected PDFs cannot be rendered or OCR’d. They are logged with status: "error" and ocr_error: "encrypted_pdf" and are quarantined pending manual review.
  • OCR is not redaction: Image DLP detects sensitive content in images but does not redact the original image file. Quarantine or block actions apply to the whole file.