OpenCV Image Analyzer: Faces, Quality & Colors avatar

OpenCV Image Analyzer: Faces, Quality & Colors

Pricing

from $11.25 / 1,000 image analyzeds

Go to Apify Store
OpenCV Image Analyzer: Faces, Quality & Colors

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

RecordsData

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

RecordsData

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 groupDuplicates every row gets duplicateGroupId, isDuplicate, keptUrl and duplicateDistance; duplicateThreshold runs 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.

FieldDescription
imageUrl, format, mimeType, width, height, megapixels, aspectRatio, fileSizeBytes, colorSpace, channels, hasAlpha, hasIccProfile, density, frameCountBase metadata on every row
faceCount, facesFaces and, per face: box, confidence, eyes, nose, mouth corners, cropUrl
sharpnessScore, isBlurry, brightness, contrast, exposureBlur score and verdict (threshold 100), gray-level mean and deviation, Normal / Overexposed / Underexposed
clippedShadowsPct, clippedHighlightsPctShare of near-black and near-white pixels
dominantColors, averageColorHexK-means palette with hex and percent, and mean color
aHash, dHash64-bit perceptual hashes, 16 hex characters
duplicateGroupId, isDuplicate, keptUrl, duplicateDistanceWith groupDuplicates
hasExif, cameraMake, cameraModel, lensModel, dateTaken, iso, aperture, exposureTime, focalLengthMm, flashFiredWith includeExif: camera and exposure settings
hasGps, gpsLatitude, gpsLongitude, gpsAltitudeM, gpsDateTimeWith includeExif, only when the photo has GPS
title, description, keywords, creator, artist, copyright, rightsWith includeExif: XMP first, then IPTC, then EXIF text
annotatedImageUrl, scrapedAt, error, errorType, hintSaved 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:

EventWhen it is chargedPricePer 1,000 images
Image analyzedEach image successfully analyzed$0.015$15
Face detection, Quality metrics, Dominant colors, Perceptual hashesModule enabled, per image each$0.01$10
EXIF metadataincludeExif on and image has hasExif: true$0.003$3
Annotated image, Face cropsOption 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)

  1. Paste direct image URLs into Image URLs (one per line), or give a dataset ID.
  2. Switch modules on or off and set Max Items to limit how many images are analyzed and billed.
  3. Click Start, then download the dataset as CSV, Excel, JSON or XML.

โš™๏ธ Input

FieldDefaultWhat it does
imageUrls5 OpenCV samplesDirect image URLs. Optional when datasetId is set
datasetId, imageUrlFieldnone, imageUrlDataset whose items hold image URLs; repeated URLs analyzed once
maxItems10Max images analyzed and billed. Free users: 10
detectFaces, minFaceConfidence, maxFacesPerImagetrue, 60, 0Face detection; minimum percent; keep N most confident (0 = all)
qualityMetrics, perceptualHashtrueBlur and exposure; aHash and dHash
extractColors, colorCounttrue, 5K-means palette size, 1 to 10
groupDuplicates, duplicateThresholdfalse, 6Duplicate group fields; max differing bits
includeExiffalseCamera, dates, GPS, title, keywords, copyright. May contain names and locations
saveAnnotatedImages, saveFaceCropsfalseJPEG with faces drawn; one JPEG per face. Need detectFaces
proxyConfigurationno proxyEnable 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 actorsantamaria image-metadata-extractorsyntellect face-recognition-api
Main jobFaces, quality, colors, hashes, duplicates, metadataEXIF, GPS, IPTC and XMP fieldsFace recognition, age, gender, emotion
Faces, colors, hashesYes, with landmarks and paletteNot shownFaces yes, rest not shown
Price per 1,000$15 base, $55 with four modulesFrom $2From $1
Runs succeeded19 of 19 own test runs100% (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.

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