ovkit
OpenVINO inference in 3 lines. One Model class, clean Results, 30+
ready models — with AUTO/NPU/GPU devices, async throughput, and INT8.
Docs · 한국어 문서 · Model catalog · Examples
from ovkit import Model
r = Model("detect")("image.jpg")[0] # download -> convert -> cache -> run
r.save("out.jpg") # boxes drawn; r.boxes.xyxy / .conf / .cls
Or without writing Python at all:
ovkit run detect image.jpg # prints results, saves image_out.jpg
Install
pip install ovkit
Extras: ovkit[quant] (INT8/NNCF) · ovkit[genai] (LLM/STT) · ovkit[all].
Python 3.10+. For development, install from source:
git clone https://github.com/leeyunjai82/ovkit.git && cd ovkit
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
Supported tasks
Every task below runs end-to-end through the same 3 lines — swap the alias:
| Task | Alias | Output | Example |
|---|---|---|---|
| Object detection | detect, face_detection, person_detection, vehicle_detection, text_detection, license_plate |
r.boxes |
detect.py |
| Classification | classify, person_attributes, vehicle_attributes |
r.probs / text |
classify.py |
| Segmentation | segment, instance_segmentation |
r.masks |
segment.py |
| Pose / landmarks | pose, face_landmarks |
r.keypoints |
pose.py |
| Face analysis | age_gender, emotion, head_pose, face_reid |
r.text (e.g. "age 31 · male 98%") |
face_analysis.py |
| OCR | text_recognition |
r.text |
ocr.py |
| Super-resolution | super_resolution |
upscaled image via r.plot() |
super_resolution.py |
| LLM / STT (GenAI) | llm, stt |
generated text | llm.py / stt.py |
| NLP / audio / time series | qa, translation, noise_suppression, time_series |
tensors via model.infer() |
denoise_audio.py |
The registry exposes one well-tested model per capability (35 total); the
HF mirror hosts the full
Apache-2.0 OMZ set (other tiers, int8, sparse variants) — surfacing a
variant is a one-line edit (catalog).
ovkit list shows everything with descriptions.
Devices
| Device | How | Notes |
|---|---|---|
| AUTO (default) | Model("detect") |
OpenVINO picks the best device |
| CPU | Model("detect", device="CPU") |
works everywhere |
| GPU | device="GPU" |
Intel iGPU / Arc |
| NPU | device="NPU" |
Intel® Core™ Ultra AI accelerator |
Single images run synchronously; stream=True uses an AsyncInferQueue for
video/webcam throughput. INT8: model.quantize(calib_images) (NNCF).
Benchmarks
python scripts/benchmark.py # prints a paste-ready CPU/GPU/NPU table
Usage
Python
from ovkit import Model
model = Model("face_detection") # alias, name, .xml, or .onnx
results = model("photo.jpg", conf=0.25) # image / ndarray / folder / video
for r in model.predict(0, stream=True): # webcam (lazy generator)
annotated = r.plot()
print(Model("age_gender")("face.jpg")[0].text) # "age 31 · male 98%"
Inputs are auto-detected: image path / ndarray / folder / video / camera
index → vision pipeline; .npy / .wav → raw inference. Grayscale models and
all-image multi-input models (super-resolution) are handled automatically. Full
control for any model: model.infer({name: tensor}) with model.inputs.
Results |
holds |
|---|---|
r.boxes |
xyxy, xywh, conf, cls |
r.masks / r.keypoints / r.probs |
masks · [x,y,conf] · top1/top5 |
r.text |
decoded text (OCR, face attributes) |
r.tensors |
raw {name: ndarray} |
r.plot() / r.save(path) |
annotated image (or the model's output image) |
CLI
ovkit run detect image.jpg --save out.jpg # one-shot inference
ovkit run age_gender face.jpg --device NPU
ovkit list # aliases + models with descriptions
ovkit info face_detection # source / task / license
ovkit download detect # warm the cache
ovkit devices # available OpenVINO devices
GenAI (LLM / speech-to-text)
from ovkit.genai import pipeline
llm = pipeline("llm") # tinyllama_chat from the mirror
print(llm.generate("Explain OpenVINO in one sentence.", max_new_tokens=64))
stt = pipeline("stt") # whisper_base
print(stt.generate(audio_16k_mono_float32))
Needs pip install "ovkit[genai]".
Web demo (image / webcam / audio / text)
pip install -r examples/requirements.txt
python examples/web_app.py # http://127.0.0.1:8000
Pick any model — the right input (upload / webcam / audio / text) appears automatically and results render with overlays.
Adding a model
Models are data, not code — one manifest entry
(src/ovkit/manifests/):
my_model:
src: hf
repo: leeyunjai/ovkit-models
filename: detect/my_model/model.xml
task: detect
description: Shown by `ovkit list`.
license: apache-2.0 # must be permissive — enforced at load time
Resolution: alias → local path → cache (~/.cache/ovkit) → download → convert
→ cache, with atomic writes, sha256 checks, upstream fallback, and
OVKIT_OFFLINE=1. Maintainer tooling (mirror build / verify / self-check /
benchmark) lives in scripts/ — see the
guide.
License
ovkit is Apache-2.0 and license-clean by design: only permissive (Apache/MIT/BSD) models and libraries — no AGPL model stacks, no non-commercial weights; every manifest entry must declare a permissive license (enforced at load time).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ovkit-0.1.1.tar.gz.
File metadata
- Download URL: ovkit-0.1.1.tar.gz
- Upload date:
- Size: 51.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24394d4c351c12faeef13ff398e1d01278ea49c9236fdd2c29dcd64dedced620
|
|
| MD5 |
a1a5989261e673d62b0755eb0f9d8044
|
|
| BLAKE2b-256 |
cf0a7776ae64682cb9bb90290d73e2dc530e3002ba9d8d8f86d09cf0f8aea0b1
|
Provenance
The following attestation bundles were made for ovkit-0.1.1.tar.gz:
Publisher:
release.yml on leeyunjai82/ovkit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ovkit-0.1.1.tar.gz -
Subject digest:
24394d4c351c12faeef13ff398e1d01278ea49c9236fdd2c29dcd64dedced620 - Sigstore transparency entry: 2570957459
- Sigstore integration time:
-
Permalink:
leeyunjai82/ovkit@400c67eb4b5438e1a483185c88a7bee5f41d3fd7 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/leeyunjai82
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@400c67eb4b5438e1a483185c88a7bee5f41d3fd7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ovkit-0.1.1-py3-none-any.whl.
File metadata
- Download URL: ovkit-0.1.1-py3-none-any.whl
- Upload date:
- Size: 65.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb18360fa79123bc1989a02d6995e00e7b0a2675b6932b19891645a504f82544
|
|
| MD5 |
32c3ce1cc18b81ad4b6f40bf511bfe83
|
|
| BLAKE2b-256 |
7dfddbb6c0d832dfc2ac7f4883b7d19d0124ae4dc4bde45d5f9a98343243aa1c
|
Provenance
The following attestation bundles were made for ovkit-0.1.1-py3-none-any.whl:
Publisher:
release.yml on leeyunjai82/ovkit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ovkit-0.1.1-py3-none-any.whl -
Subject digest:
cb18360fa79123bc1989a02d6995e00e7b0a2675b6932b19891645a504f82544 - Sigstore transparency entry: 2570957485
- Sigstore integration time:
-
Permalink:
leeyunjai82/ovkit@400c67eb4b5438e1a483185c88a7bee5f41d3fd7 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/leeyunjai82
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@400c67eb4b5438e1a483185c88a7bee5f41d3fd7 -
Trigger Event:
push
-
Statement type: