Skip to content
ModelListedExternal
Download

Yolov8n Proctoring

YOLOv8 Nano model used for real-time AI-powered exam proctoring in the GradicAI platform.

KindOtherVersionRevision bd8b90b

Model source

Kind
Other
File size
6.25 MB
Version
vRevision bd8b90b
Updated
Oct 21, 2026
Downloads
0
Source
Hugging Face

Source description

πŸŽ“ YOLOv8n β€” GradicAI Exam Proctoring

YOLOv8 Nano model used for real-time AI-powered exam proctoring in the GradicAI platform.

Model Description

This is the standard YOLOv8n (nano) model from Ultralytics, pre-trained on the COCO dataset. It is used as-is (no fine-tuning) for the GradicAI proctoring service to detect prohibited objects and suspicious behavior during online exams.

PropertyValue
ArchitectureYOLOv8 Nano
Parameters3.2M
Model Size~6 MB
Training DataCOCO (80 classes)
Input Resolution640Γ—640
Inference Speed~100-300ms (CPU)

Classes Used for Proctoring

Out of the 80 COCO classes, GradicAI uses only 3 for proctoring:

COCO Class IDLabelProctoring Action
0personCount persons β€” warn if 0 or >1
67cell phone⚠️ Warning: phone detected
73book⚠️ Warning: study material detected

Violation Logic

if person_count == 0  β†’ "face_absent" warning
if person_count > 1   β†’ "multiple_persons" warning
if phone detected     β†’ "phone" warning
if book detected      β†’ "book" warning

3 warnings β†’ exam terminated

How to Use

Installation

pip install ultralytics

Python Inference

from ultralytics import YOLO

# Load model
model = YOLO("yolov8n.pt")

# Run inference on an image
results = model("exam_frame.jpg", conf=0.25)

# Process detections
for box in results[0].boxes:
    cls = int(box.cls[0])
    conf = float(box.conf[0])
    label = results[0].names[cls]
    print(f"Detected: {label} ({conf:.2f})")

Integration with GradicAI Proctoring

import base64
import io
import numpy as np
from PIL import Image
from ultralytics import YOLO

PERSON_CLASS = 0
PHONE_CLASS = 67
BOOK_CLASS = 73

model = YOLO("yolov8n.pt")

def analyze_frame(b64_data: str) -> dict:
    """Analyze a base64-encoded webcam frame for proctoring violations."""
    if "," in b64_data:
        b64_data = b64_data.split(",", 1)[1]
    
    raw = base64.b64decode(b64_data)
    img = Image.open(io.BytesIO(raw)).convert("RGB")
    frame = np.array(img)
    
    results = model(frame, verbose=False, conf=0.25)[0]
    
    persons = 0
    violations = []
    
    for box in results.boxes:
        cls = int(box.cls[0])
        if cls == PERSON_CLASS:
            persons += 1
        elif cls == PHONE_CLASS:
            violations.append("phone")
        elif cls == BOOK_CLASS:
            violations.append("book")
    
    if persons == 0:
        violations.append("face_absent")
    elif persons > 1:
        violations.append("multiple_persons")
    
    return {"violations": violations, "person_count": persons}

Part of GradicAI

This model powers the proctoring feature of GradicAI β€” an AI-powered exam and grading platform:

  • πŸ€– AI Grading β€” GPT-4o grades open-ended answers with per-question feedback
  • πŸ“Ή Live Proctoring β€” YOLOv8n webcam monitoring via WebSocket
  • πŸ“ Structured Exams β€” Google Forms-style per-question UI
  • πŸ“š AI Quizzes β€” Auto-generated practice quizzes from exam content

License

The YOLOv8 model is released under the AGPL-3.0 license by Ultralytics.

Citation

@software{yolov8_ultralytics,
  author = {Glenn Jocher and Ayush Chaurasia and Jing Qiu},
  title = {Ultralytics YOLOv8},
  version = {8.0.0},
  year = {2023},
  url = {https://github.com/ultralytics/ultralytics},
  license = {AGPL-3.0}
}

Sources

1 source
Hugging FacePrimaryVersion bd8b90b5d54d5512b759240e96f27c4e8632ce66
huggingface.co/asna14/yolov8n-proctoring/tree/bd8b90b5d54d5512b759240e96f27c4e8632ce66

Verified Oct 21

Model artifacts

1 artifact

yolov8n.pt

pt Β· 6.25 MB Β· SHA-256 f59b3d833e2f…3b36 Β· Hugging Face

Download

Source excerpts

3 excerpts

--- license: agpl-3.0 library_name: ultralytics pipeline_tag: object-detection tags: - yolov8 - object-detection - proctoring - exam-monitoring - ultralytics - coco datasets: - coco metrics: - map language: - en --- # πŸŽ“ YOLOv8n β€” GradicAI Exam Proctoring **YOLOv8 Nano** model used for real-time AI-powered exam proctoring in the [GradicAI](https://github.com/asna14/GradicAI) platform. ## Model Description This is the standard **YOLOv8n (nano)** model from [Ultralytics](https://docs.ultralytics.com/), pre-trained on the COCO dataset. It is used as-is (no fine-tuning) for the GradicAI proctoring service to detect prohibited objects and suspicious behavior during online exams. | Property | Value | |---|---| | **Architecture** | YOLOv8 Nano | | **Parameters** | 3.2M | | **Model Size** | ~6 MB | | **Training Data** | COCO (80 classes) | | **Input Resolution** | 640Γ—640 | | **Inference Speed** | ~100-300ms (CPU) | ## Classes Used for Proctoring Out of the 80 COCO classes, GradicAI uses only 3 for proctoring: | COCO Class ID | Label | Proctoring Action | |---|---|---| | 0 | `person` | Count persons β€” warn if 0 or >1 | | 67 | `cell phone` | ⚠️ Warning: phone detected | | 73 | `book` | ⚠️ Warning: study material detected | ## Violation Logic ``` if person_count == 0 β†’ "face_absent" warning if person_count > 1 β†’ "multiple_persons" warning if phone detected β†’ "phone" warning if book detected β†’ "book" warning 3 warnings β†’ exam terminated ``` ## How to Use ### Installation ```bash pip install ultralytics ``` ### Python Inference ```python from ultralytics import YOLO # Load model model = YOLO("yolov8n.pt") # Run inference on an image results = model("exam_frame.jpg", conf=0.25) # Process detections for box in results[0].boxes: cls = int(box.cls[0]) conf = float(box.conf[0]) label = results[0].names[cls] print(f"Detected: {label} ({conf:.2f})") ``` ### Integration with GradicAI Proctoring ```python import base64 import io import numpy as np from PIL import Image from ultralytics import YOLO PERSON_CLASS = 0 PHONE_CLASS = 67 BOOK_CLASS = 73 model = YOLO("yolov8n.pt") def analyze_frame(b64_data: str) -> dict: """Analyze a base64-encoded webcam frame for proctoring violations.""" if "," in b64_data: b64_data = b64_data.split(",", 1)[1] raw = base64.b64decode(b64_data) img = Image.open(io.BytesIO(raw)).convert("RGB") frame = np.a...

Source context: 0 downloads Β· 0 likes Β· Pipeline object-detection Β· Library ultralytics Β· Repo asna14/yolov8n-proctoring

Source context: 17 downloads Β· 0 likes Β· Pipeline object-detection Β· Library ultralytics Β· Repo asna14/yolov8n-proctoring