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.
How It Works
Section titled “How It Works”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 | vMIME 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 | vAudit 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.
Configuration
Section titled “Configuration”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.
image_ocr_enabled
Section titled “image_ocr_enabled”Enables or disables OCR-based image scanning for the org.
Default: false
# Read current valuecurl -s -H "Authorization: Bearer $ADMIN_TOKEN" \ https://api.arbitex.ai/api/v1/admin/config/image_ocr_enabled
# Enablecurl -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_enabledimage_ocr_provider
Section titled “image_ocr_provider”Selects the OCR backend. Accepted values: "azure" (Azure AI Vision) or "tesseract" (local Tesseract engine).
"azure"— default for SaaS deployments. Requires theAZURE_AI_VISION_ENDPOINTandAZURE_AI_VISION_KEYsecrets 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)
# Read current providercurl -s -H "Authorization: Bearer $ADMIN_TOKEN" \ https://api.arbitex.ai/api/v1/admin/config/image_ocr_provider
# Set to tesseractcurl -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_providerimage_ocr_max_file_size_mb
Section titled “image_ocr_max_file_size_mb”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)
# Read current limitcurl -s -H "Authorization: Bearer $ADMIN_TOKEN" \ https://api.arbitex.ai/api/v1/admin/config/image_ocr_max_file_size_mb
# Set to 50 MBcurl -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_mbimage_ocr_timeout_seconds
Section titled “image_ocr_timeout_seconds”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)
# Read current timeoutcurl -s -H "Authorization: Bearer $ADMIN_TOKEN" \ https://api.arbitex.ai/api/v1/admin/config/image_ocr_timeout_seconds
# Set to 60 secondscurl -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_secondsSupported Formats
Section titled “Supported Formats”| 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.
DLP Findings from Image OCR
Section titled “DLP Findings from Image OCR”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.
Audit Events
Section titled “Audit Events”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.
Outpost Deployment
Section titled “Outpost Deployment”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.
Limitations
Section titled “Limitations”- 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 theimage_ocr_timeout_secondsvalue accordingly for your document profiles. - Encrypted PDFs: Password-protected PDFs cannot be rendered or OCR’d. They are logged with
status: "error"andocr_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.