Skip to content

Quickstart

Set OFIQPY_OFIQ_DATA to your OFIQ data/ directory first (see Installation).

Python API

from ofiqpy import assess

scores = assess("face.jpg")
# scores: {component_name: (raw_native_value, scalar_0_100)}

raw, scalar = scores["UnifiedQualityScore"]
print(f"unified quality: {scalar}/100 (magnitude {raw:.2f})")

for name, (raw, scalar) in sorted(scores.items()):
    print(f"{name:28} {scalar:3.0f}")

assess also accepts a BGR uint8 numpy array (as returned by cv2.imread):

import cv2
from ofiqpy import assess
scores = assess(cv2.imread("face.jpg"))

Lower-level API

For access to the shared pipeline products (aligned face, landmarks, masks, pose):

import cv2
from ofiqpy.config import OFIQConfig
from ofiqpy.pipeline import OFIQPipeline
from ofiqpy.measures.core import Measures

cfg = OFIQConfig()
pipe = OFIQPipeline(cfg)
meas = Measures(cfg)

session = pipe.process(cv2.imread("face.jpg"))
# session.aligned_face, session.landmarks, session.aligned_landmarks,
# session.parsing, session.occlusion_mask, session.yaw/pitch/roll ...
scores = meas.compute(session)          # {name: (raw, scalar)}
scalars = meas.compute_scalars(session) # {name: scalar}

Command line

# single image or directory -> OFIQ-format CSV
ofiqpy -i face.jpg -o out.csv
ofiqpy -i /path/to/images/ -o out.csv

# parallel batch over a large directory (resumable)
python -m ofiqpy.batch -i /path/to/images/ -o out.csv -w 8 --resume

The CSV mirrors OFIQSampleApp: semicolon-delimited, named columns, raw value + .scalar per component, plus assessment_time_in_ms. See CLI & Batch.