DATA · AI/ML · BUSINESS ANALYSIS

Emani K.
Atkins.

Data Analyst · AI/ML · Business Analysis

I work across data, artificial intelligence, and technology to solve problems, evaluate systems, and support informed decision-making.

Python · SQL · Machine Learning · Data Analysis · AI Governance
01 / ABOUT

About me

I’m a data and technology professional with experience across analytics, artificial intelligence, business analysis, and enterprise systems. My background combines hands-on technical work with an M.S. in Cybersecurity Technology, giving me a practical perspective on how data and emerging technologies can be used responsibly and effectively.

I enjoy working at the intersection of technology and problem-solving—whether that involves analyzing data, developing technical solutions, evaluating new technologies, or translating complex information for different audiences.

02 / RESUME

Professional background.

My experience spans data and machine learning, business analysis and AI governance, GIS, enterprise systems, and technical operations.

2026 — PRESENT

Business Analyst

AI Governance & Technology

AI governance, policy and risk considerations, stakeholder collaboration, and responsible technology adoption.

2022 — 2026

Data Analyst

Computer Vision & ML

Computer vision, data pipelines, model development and evaluation, production troubleshooting, and secure technical integrations.

2021 — 2022

GIS Developer

Data & Applications

PostgreSQL, ETL and data conversion, application troubleshooting, system integration, and technical documentation.

2018 — 2021

Enterprise GIS Analyst

Enterprise Technology

Enterprise applications, SQL Server, cloud services, data governance, automation, and operational support.

2017 — 2018

Earlier GIS Experience

Spatial Data & Analysis

Spatial data quality, field-data workflows, data conversion, mapping, and technical analysis.

EDUCATION

M.S. Cybersecurity Technology · University of Maryland Global Campus

B.A. Environmental Studies · University of Maryland Baltimore County

Selected capabilities

Python · SQL · Computer Vision · Machine Learning · AI Governance · ETL & Data Conversion · PostgreSQL · SQL Server · Power BI · Linux · Docker · Azure DevOps · Requirements Analysis · Technical Documentation · Executive Reporting

03 / SELECTED PROJECTS

From data to practical decisions.

Two Python projects exploring computer vision and explainable cybersecurity workflows. Explore the problem, approach, and output of each.

PROJECT 01 / COMPUTER VISION

Pose-Aware PPE Compliance Detection

A computer-vision prototype combining custom YOLO detection with human pose estimation to identify hard hats and safety vests and infer potentially missing PPE.

PYTHON · YOLO · PYTORCH · MEDIAPIPE · ROBOFLOW · OPENCV

I trained a custom YOLO detector on annotated PPE images from Roboflow to find people, hard hats, and safety vests in one pass. YOLO Pose and MediaPipe then add body keypoints for the people it detected, matched by spatial overlap. Those keypoints define head and torso regions, and IoU, containment, and center-in-region checks link PPE to each person. The system labels detected equipment, flags likely missing hard hats or vests, and returns unknown when no pose can be matched instead of guessing.

01 · Roboflow person & PPE detection 02 · Pose keypoints (YOLO Pose / MediaPipe) 03 · Pose-to-person association 04 · Expected region estimation 05 · Compliance matching & output
WHAT I WORKED ON
  • Prepared and annotated PPE image data in Roboflow for custom YOLO object-detection training.
  • Trained and evaluated object-detection models for hard hats and safety vests.
  • Built a spatial association step that attaches each pose to the correct Roboflow-detected person before any region is computed.
  • Derived expected PPE regions from anatomical keypoints and implemented IoU/spatial matching logic.
  • Generated annotated images and structured JSON results for detected, missing, and indeterminate PPE states.
  • Applied secure configuration practices by isolating secrets in ignored environment files and keeping public configuration free of API keys.
BATCH EVALUATION

To see how the two pose backends behave beyond a single photo, I ran the full pipeline on a batch of 12 images. Roboflow detected 51 people across the set, along with 22 hard hats and 9 safety vests.

70.6% / 72.6% Pose coverage
MediaPipe / YOLO Pose
80.7% Hard hat agreement
between backends
93.2% Safety vest agreement
between backends
~1.2s Avg. processing time
per image, both backends

Agreement wasn't uniform. On one image the two backends disagreed on every hard-hat call while matching perfectly on the vest — a reminder that pose-derived regions are sensitive to keypoint placement, and exactly the kind of case a dual-backend comparison is meant to surface rather than hide. These are descriptive comparisons, not accuracy scores: without hand-labeled ground truth, agreement shows where the backends diverge, not which one was right.

Worker wearing a hard hat and safety vest, both detected and outlined in green with confidence scores.
Fully compliant — hard hat detected (0.92) and safety vest detected (0.95).
Worker with a detected hard hat and a red box marking a missing safety vest.
Missing safety vest flagged from the chest region estimated by pose keypoints, while the hard hat is detected (0.96).
Street scene with several workers, each individually labeled with detected or missing hard hats and vests.
Multi-person scene — each worker is evaluated independently: some hard hats are detected (P1 0.95, P3 0.89) while others are flagged missing (P2, P5, P7), and safety vests are missing across the group.
CODE SAMPLE

Region-matching logic

Condensed from matching/compliance.py. A PPE detection only counts if it spatially belongs to the Roboflow-detected person, then it's scored against the region expected from that person's pose using IoU, containment, and a center-in-region check.

This is a condensed excerpt — the repository has the full version with per-match diagnostics.

matching/compliance.pyPython
def best_ppe_match(detections, expected_region, person_box, threshold):
    """Match a PPE detection to the region expected from a person's pose."""
    if expected_region is None or person_box is None:
        return None

    best, best_score = None, 0.0
    for d in detections:
        box = d.get("box")
        if box is None or not center_in_box(box, person_box):
            continue  # PPE must belong to this Roboflow-detected person

        iou = intersection_over_union(box, expected_region)
        containment = intersection_over_detection(box, expected_region)
        score = max(iou, containment)

        # A detection centered in the expected region counts even when
        # the box sizes differ enough to produce a low IoU
        if center_in_box(box, expected_region):
            score = max(score, threshold)

        if score >= threshold and score > best_score:
            best, best_score = {**d, "match_score": round(float(score), 4)}, score
    return best

Explore the codebase

The repository can provide a closer look at the detection, pose-estimation, compliance, annotation, and evaluation components you choose to share publicly.

Open project repository ↗
PROJECT 02 / CYBERSECURITY

PatchTeam

An explainable vulnerability-prioritization workflow.

PYTHON · MULTI-AGENT WORKFLOWS · JSON · VULNERABILITY TRIAGE

PatchTeam turns CISA’s public Known Exploited Vulnerabilities catalog into a readable patch-priority briefing. Four specialized Python agents collect the data, score recent entries, review the decisions, and produce a Markdown report tailored to a configured software watchlist.

Each recommendation includes the rules behind its score: a vendor or product match, known ransomware use, a recent catalog addition, and the CISA due date. The report groups findings into Patch Now, This Week, and Watch, making the decision process easy to inspect.

Python automationAPI & JSON handlingExplainable scoringSecurity reporting
01 · Collector
Fetch the KEV feed; attempt cache and sample fallbacks.
02 · Triage
Score entries within the configured lookback window.
03 · Reviewer
Remove duplicate CVEs and apply relevance rules.
04 · Reporter
Write a dated briefing and latest.md.
HOW THE CODE WORKS
  • main.py runs the four agents in order. A shared state dictionary carries the configuration, findings, decisions, and report path.
  • config.json defines the software watchlist, lookback window, and maximum entries displayed per tier.
  • agents.py contains collection, a score capped at 100, duplicate removal, tier assignment, and report generation.
  • The core workflow uses explicit Python rules. An optional external AI summary can add prose without deciding the scores or tiers.
Scoring, review rules, and practical limits

Scoring starts at 10 for a KEV entry. A watchlist match adds 30, known ransomware use adds 40, and addition within seven days adds 15. A passed CISA due date adds 15; a due date within seven days adds 10. The final score is capped at 100.

Scores of 60 or more enter Patch Now; 40–59 enter This Week; lower scores enter Watch. The Reviewer moves out-of-watchlist Patch Now entries to This Week and includes a note explaining the change.

This is a rule-based agent workflow with optional AI-assisted reporting. Watchlist matching uses text substrings, so it does not verify installed software versions or actual exposure. The lookback window excludes older catalog entries; the briefing is a focused review, rather than a complete vulnerability inventory.

CISA dates are catalog reference dates, not a custom deadline for every reader. A person still needs to verify applicability and remediation guidance before acting.

CODE SAMPLE

Each agent reads the current state, adds its results, and passes the state to the next agent. This keeps collection, prioritization, review, and reporting in separate components.

main.py · orchestrationPython
agents = [CollectorAgent(offline=args.offline),
          TriageAgent(), ReviewerAgent(), ReporterAgent()]

for agent in agents:
    state = agent.run(state)
PatchTeam report dated September 29, 2026, watching Microsoft: 1 Patch Now, 10 This Week, and 33 Watch.
September 29 briefing — Microsoft watchlist, with 1 Patch Now, 10 This Week, and 33 Watch findings.
Patch Now report entry for Microsoft SharePoint CVE-2026-65660, score 70, showing remediation guidance and four scoring reasons.
Patch Now — a SharePoint entry scored 70, with its action and scoring reasons.
This Week report entry for Microsoft Windows CVE-2026-81963, score 55, showing remediation guidance and three scoring reasons.
This Week — a Windows entry scored 55. Open any image to read the full report excerpt.
04 / CONTACT

Connect with me.