OpenCV Image Analyzer: Faces, Quality & Colors
Pricing
from $11.25 / 1,000 image analyzeds
OpenCV Image Analyzer: Faces, Quality & Colors
Analyze image URLs with OpenCV: YuNet face detection with 5 landmarks, blur and exposure scores, k-means dominant colors and aHash/dHash duplicate hashes. 22 fields per image. Export CSV, Excel, JSON or XML. No AI API key, no login, images never leave the run.
Pricing
from $11.25 / 1,000 image analyzeds
Rating
0.0
(0)
Developer
RecordsData
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
OpenCV Image Analyzer analyzes image URLs with OpenCV 5 and writes one row per image: face detection with 5 landmarks (YuNet), blur and exposure scores, k-means dominant colors, aHash/dHash hashes, near-duplicate grouping and optional embedded metadata (EXIF, XMP, IPTC: camera, dates, GPS, title, keywords, copyright). Paste direct image URLs or read them from another run's dataset, get up to 66 fields per image, export CSV, Excel, JSON or XML. No AI API key and no login. Verified in cloud runs on 2026-10-10: 19 of 19 small runs succeeded, median 4.7 seconds. Priced from $0.015 per image, $0.055 with the four analysis modules.
๐ฌ What does the OpenCV Image Analyzer do?
- Detect faces with landmarks. YuNet returns a box, a 0 to 1 confidence and 5 landmarks (eyes, nose, mouth corners) per face.
- Check blur and exposure. Sharpness (variance of Laplacian), a blurry Yes/No verdict, brightness, contrast, exposure verdict and clipped shadows and highlights.
- Extract dominant colors. K-means returns 1 to 10 hex colors with coverage, plus the average color.
- Find near-duplicates. 64-bit aHash and dHash per image. With
groupDuplicatesevery row getsduplicateGroupId,isDuplicate,keptUrlandduplicateDistance;duplicateThresholdruns 0 to 32 bits (default 6). - Read EXIF, XMP and IPTC. Camera, lens, dates, ISO, aperture, GPS, title, keywords, creator and copyright. Only fields the file carries are returned. JPEG, PNG, TIFF and WebP work; AVIF and HEIF return nothing.
- Save annotated images and face crops to the run key-value store, with links in the row.
๐ What data can you extract from an image URL?
Up to 66 fields per image. Fields of a module you switch off, or that a file lacks, are omitted, never null.
| Field | Description |
|---|---|
imageUrl, format, mimeType, width, height, megapixels, aspectRatio, fileSizeBytes, colorSpace, channels, hasAlpha, hasIccProfile, density, frameCount | Base metadata on every row |
faceCount, faces | Faces and, per face: box, confidence, eyes, nose, mouth corners, cropUrl |
sharpnessScore, isBlurry, brightness, contrast, exposure | Blur score and verdict (threshold 100), gray-level mean and deviation, Normal / Overexposed / Underexposed |
clippedShadowsPct, clippedHighlightsPct | Share of near-black and near-white pixels |
dominantColors, averageColorHex | K-means palette with hex and percent, and mean color |
aHash, dHash | 64-bit perceptual hashes, 16 hex characters |
duplicateGroupId, isDuplicate, keptUrl, duplicateDistance | With groupDuplicates |
hasExif, cameraMake, cameraModel, lensModel, dateTaken, iso, aperture, exposureTime, focalLengthMm, flashFired | With includeExif: camera and exposure settings |
hasGps, gpsLatitude, gpsLongitude, gpsAltitudeM, gpsDateTime | With includeExif, only when the photo has GPS |
title, description, keywords, creator, artist, copyright, rights | With includeExif: XMP first, then IPTC, then EXIF text |
annotatedImageUrl, scrapedAt, error, errorType, hint | Saved image link; timestamp; error columns only on error rows |
๐งช Sample output from a real run
A row from a cloud run on the OpenCV project's public messi5.jpg sample (optional columns omitted):
{"imageUrl": "https://raw.githubusercontent.com/opencv/opencv/4.x/samples/data/messi5.jpg","width": 548,"height": 342,"faceCount": 1,"faces": [{ "x": 226, "y": 93, "width": 31, "height": 40, "confidence": 0.92, "nose": [248, 114] }],"sharpnessScore": 786.7,"isBlurry": "No","brightness": 83.3,"exposure": "Normal","dominantColors": [{ "hex": "#4d4047", "percent": 27.9 },{ "hex": "#678f35", "percent": 19.7 }],"aHash": "400000106706ffff","dHash": "ca5a5678cccceace","scrapedAt": "2026-10-04T05:00:53.969Z"}
In 2026-10-10 runs with includeExif, a GPS photo returned Nikon COOLPIX P6000, ISO 64, f/5.9, 1/75 s and latitude 43.467448, and a photo given under two URLs came back with isDuplicate: true and duplicateDistance: 0.
๐ฐ How much does it cost to analyze images?
Pay per event: once per analyzed image, plus once per module that ran. Free plan prices:
| Event | When it is charged | Price | Per 1,000 images |
|---|---|---|---|
| Image analyzed | Each image successfully analyzed | $0.015 | $15 |
| Face detection, Quality metrics, Dominant colors, Perceptual hashes | Module enabled, per image each | $0.01 | $10 |
| EXIF metadata | includeExif on and image has hasExif: true | $0.003 | $3 |
| Annotated image, Face crops | Option on, per image saved | $0.005 | $5 |
All four modules: $0.055 per image, so 10 images cost $0.55 and 1,000 images cost $55. With EXIF too, $0.058. Base plus one module: $0.025. Metadata only (modules off, includeExif on): $0.018. Everything on, with annotated images and crops: $0.068 at most. The base event drops to $0.01375 (Bronze), $0.0125 (Silver) and $0.01125 (Gold and above).
You are not charged for failed or empty lookups. Error rows (404, invalid image) and runs with no valid images cost nothing. A maximum cost per run stops the actor cleanly.
๐ How to analyze images with OpenCV (3 steps)
- Paste direct image URLs into Image URLs (one per line), or give a dataset ID.
- Switch modules on or off and set Max Items to limit how many images are analyzed and billed.
- Click Start, then download the dataset as CSV, Excel, JSON or XML.
โ๏ธ Input
| Field | Default | What it does |
|---|---|---|
imageUrls | 5 OpenCV samples | Direct image URLs. Optional when datasetId is set |
datasetId, imageUrlField | none, imageUrl | Dataset whose items hold image URLs; repeated URLs analyzed once |
maxItems | 10 | Max images analyzed and billed. Free users: 10 |
detectFaces, minFaceConfidence, maxFacesPerImage | true, 60, 0 | Face detection; minimum percent; keep N most confident (0 = all) |
qualityMetrics, perceptualHash | true | Blur and exposure; aHash and dHash |
extractColors, colorCount | true, 5 | K-means palette size, 1 to 10 |
groupDuplicates, duplicateThreshold | false, 6 | Duplicate group fields; max differing bits |
includeExif | false | Camera, dates, GPS, title, keywords, copyright. May contain names and locations |
saveAnnotatedImages, saveFaceCrops | false | JPEG with faces drawn; one JPEG per face. Need detectFaces |
proxyConfiguration | no proxy | Enable only if the image host blocks datacenter IPs |
{"imageUrls": [{ "url": "https://raw.githubusercontent.com/opencv/opencv/4.x/samples/data/lena.jpg" },{ "url": "https://raw.githubusercontent.com/opencv/opencv/4.x/samples/data/messi5.jpg" }],"maxItems": 10,"groupDuplicates": true,"includeExif": true}
๐ฆ Output
One dataset row per analyzed image, in list order. A URL that fails to download or decode gets a free row with imageUrl, scrapedAt and error. Saved images go to the run key-value store (keys annotated-* and face-*) with signed links in the row.
โ๏ธ OpenCV Image Analyzer vs alternatives
Store pages and prices read on 2026-10-10. A cell says "not shown" when the listing does not show it.
| This actor | santamaria image-metadata-extractor | syntellect face-recognition-api | |
|---|---|---|---|
| Main job | Faces, quality, colors, hashes, duplicates, metadata | EXIF, GPS, IPTC and XMP fields | Face recognition, age, gender, emotion |
| Faces, colors, hashes | Yes, with landmarks and palette | Not shown | Faces yes, rest not shown |
| Price per 1,000 | $15 base, $55 with four modules | From $2 | From $1 |
| Runs succeeded | 19 of 19 own test runs | 100% (listing) | 0.0% (listing) |
We are not the cheapest. For metadata only, our base event plus EXIF costs $0.018 per image against $0.002 at santamaria, about 9 times more, and they read HEIC and RAW, which we do not. The face-recognition actor adds age, gender and emotion; our detector never identifies people.
Limits: images over 30 MB or 268 megapixels and undecodable files come back as a free error row. This actor measures images, it does not describe them in words.
๐ผ Use cases
- E-commerce photo QA. Reject uploads with
isBlurry: "Yes", overexposure or heavy clipping. - Deduplicating libraries. Collapse re-uploads and resizes into one asset per group with
keptUrl. - Rights audits and brand analysis. Pull camera, GPS, creator, copyright and hex palettes.
๐ Run via API and integrations
curl -X POST "https://api.apify.com/v2/acts/RecordsData~opencv-image-analyzer/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"imageUrls":[{"url":"https://raw.githubusercontent.com/opencv/opencv/4.x/samples/data/lena.jpg"}],"maxItems":1}'
Schedule runs, trigger them from Zapier, Make or n8n, or send results to Google Sheets or a webhook.
๐ค OpenCV Image Analyzer MCP server for AI agents (Claude, Cursor, VS Code)
This URL exposes only this actor as a tool in any MCP client:
https://mcp.apify.com?tools=RecordsData/opencv-image-analyzer
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=RecordsData/opencv-image-analyzer"}}}
Example agent prompt: "Use the OpenCV Image Analyzer on these 20 product photo URLs with groupDuplicates on, then list every image that is blurry or overexposed, mark duplicates with their keptUrl, and give the dominant color hex of each."
An agent should choose this tool when it needs measurable facts about images (face count, blur and exposure, palette, duplicate groups, EXIF camera data) rather than a text description.
โ๏ธ Is it legal to analyze images from a URL?
The actor only downloads the image URLs you provide. It does not crawl sites or bypass logins. Make sure you may process the images you submit (copyright, privacy and local biometric rules can apply). The face detector never identifies people.
โ Frequently asked questions
How do I detect faces in many images without an AI API key?
Keep Detect faces switched on and run the OpenCV Image Analyzer on your URL list. Each face comes back with a bounding box, a confidence score and 5 landmarks (eyes, nose, mouth corners), computed by OpenCV's YuNet model inside the run. No external AI API, key or login is involved.
How do I check if an image is blurry with OpenCV Image Analyzer?
The quality module computes the variance of Laplacian and returns it as sharpnessScore. Below a threshold of 100 the actor sets isBlurry to "Yes". The raw score is in every row, so you can apply a stricter or looser threshold of your own.
How do I find duplicate images with different file names or sizes?
Switch on groupDuplicates. Every row gets duplicateGroupId, isDuplicate, keptUrl and duplicateDistance, based on the Hamming distance between the aHash and dHash values. The default of 6 bits out of 64 catches resized and re-compressed copies; raise duplicateThreshold up to 32 for looser matches.
Can I extract an image color palette as hex codes?
Yes. The dominant colors module returns each color as a hex code with the percentage of the image it covers, using k-means clustering, plus the average color of the whole image. Set colorCount to choose a palette size from 1 to 10 colors.
Which image formats does the OpenCV Image Analyzer support?
It reads JPEG, PNG, WebP, GIF (first frame only), AVIF, TIFF and SVG images, up to 30 MB and 268 megapixels each. HEIC and RAW are not supported. Very large images are analyzed on a copy downscaled to 4096 px on the long side, while the reported width and height come from the original.
What happens if I send an empty or invalid input to OpenCV Image Analyzer?
The platform rejects values that break the input schema (for example a palette size above 10) with a 400 error, so no run starts and nothing is charged. If the Image URLs list is empty, the run ends SUCCEEDED with a single free error row (errorType: "invalid-input" plus a hint).
Why did the OpenCV Image Analyzer return 0 results?
Either every URL returned an error row (404, not an image, too large), the list was empty, or the dataset ID had no items with the URL field. Read the error column in the dataset. Nothing is charged for those rows. If the host blocks datacenter IPs, enable Apify Proxy.
Do I pay for OpenCV Image Analyzer modules I switch off?
No. Each module is charged per image only when it ran, on top of the $0.015 base event. With faces off and the other three modules on, an image costs $0.045 on the Free plan. EXIF costs $0.003 per image that carries it, annotated images and face crops $0.005 each, only when switched on.
Can the OpenCV Image Analyzer read image URLs from another actor's dataset?
Yes. Set datasetId to the dataset of a previous run, for example a Pinterest or product scraper, and imageUrlField to the field that holds the URL. Dot paths such as images.0.url and lists of URLs work, and repeated URLs are analyzed once. Items without the field are skipped.
Can I read camera, date and GPS from photos with OpenCV Image Analyzer?
Yes. Switch on includeExif to get camera and lens, dates, ISO, aperture, exposure settings, flash, GPS position and UTC GPS time, plus title, keywords, creator, copyright and rights from XMP and IPTC. Only fields the file carries are returned, at $0.003 per image with EXIF data. Photos may hold names and locations, so check your right to process them.
Can I save images with the detected faces drawn on them?
Yes. saveAnnotatedImages stores a JPEG per image with the box, the five landmarks and the confidence of every face, and saveFaceCrops stores one padded crop per face. Both need Detect faces on and write to the run key-value store, with signed links in annotatedImageUrl and faces[].cropUrl. Each costs $0.005 per image saved.
Are my images sent to a third-party AI service?
No. The analysis runs inside the actor container, with OpenCV compiled to WebAssembly. Image bytes are downloaded from your URL into the run and are not sent to any AI provider or other third party. Results are deterministic, so the same image always returns the same numbers.
Can I analyze thousands of images in one OpenCV Image Analyzer run?
Yes. Paid Apify plans accept up to 1,000,000 images per run. Images are processed one at a time with the next download prefetched, so memory stays flat. Free plan: 10 images per run. With all four modules on, 1,000 images cost $55.
What happens when one image URL is broken?
The actor writes an error row for that URL does not bill it, and continues with the next URL in your list. If every download in a run is blocked or times out, the run itself fails with a clear message instead of finishing as an empty success.
How do I limit what an OpenCV Image Analyzer run can cost?
Set Max Items to cap how many images are analyzed and billed, and use the maximum cost per run option on the Apify run page. The actor stops cleanly with the status message "Stopped at your max charge limit" when the limit is reached.
๐ Want more data tools? Other RecordsData scrapers
Pinterest Scraper, TikTok Scraper and MercadoLibre Scraper produce image URLs you can analyze here.
๐ Support
Open an issue on the Issues tab of this actor or write to contact.punkrecordsdata@gmail.com.
Last updated: 2026-10-11
