Correctness before speed
Validate data and outputs first. Optimize execution time once the results are right.
Hi, I'm
I build scalable Python systems that turn raw images, video, and data into production-ready AI workflows — currently powering CV & Physical AI data pipelines.
📍 Hyderabad, India · Open to new opportunities
I'm a Software Engineer with 4 years of experience in Python development, Computer Vision, AI automation, backend development, and data processing pipelines.
I design and build Python solutions for enterprise client portals, workflow orchestration, data annotation platforms, and cloud storage integrations. I research and evaluate open-source CV models, plug pre-trained models into image & video inference pipelines, and automate the full flow: preprocessing, inference, post-processing, and annotation generation.
I care about reliability, performance, scalability, and maintainable design. Outside of work, I'm exploring AI/ML and Zero-Knowledge Proofs.
Five principles behind the pipelines on this page, and where on the site you can check each one.
Validate data and outputs first. Optimize execution time once the results are right.
Plan for errors, partial failures, bounded retries, and reruns that do not repeat finished work.
Logs, progress tracking, validation reports, and clear failure summaries, so a system can be operated, not just run.
Balance performance, reliability, maintainability, and complexity against the problem in front of me.
Measure success by less manual effort, better data quality, and workflows people can depend on.
Engineering outcomes from production work. The two figures below are measured. The rest are operational results from the same systems.
Pre-labeling with pre-trained detection models cut the labeling effort on customer datasets by 60%.
GenAI Slack bot that automatically runs scripts on demand.
Batch export to YOLO and pre-annotation formats now accounts for missing bounding boxes and pulls task metadata through, so labeling tasks are not created from incomplete predictions.
API automation that fetches, filters, and syncs tasks across environments includes error handling, retries, and logging, so a failed call is visible and can be rerun.
Multithreaded file processing and cloud storage operations move large image and video batches through onboarding without one-file-at-a-time manual uploads.
ETL for CSV, JSON, Excel, and multimedia checks records before they move downstream. On the banking GenAI pipeline, multi-source results are merged with a confidence score.
Four problems from the computer-vision and automation work: what was broken, what I built, what made it hard, and what changed.
Case study 01 · Video and annotation pipelines
Enterprise clients onboard large image and video datasets that have to become labeling tasks. Doing frame extraction, format conversion, and first-pass labeling by hand does not keep up with the volume.
I built Python pipelines around FFmpeg for transcoding, segmentation, and timestamp extraction, then ran pre-trained object-detection models over the frames. Predictions are post-processed into the annotation platform and into YOLO or pre-annotation formats.
Source media arrives in mixed formats. Model output is not a labeling task: boxes, scores, and task metadata have to be mapped, and missing boxes have to be handled before export. Cloud storage and local processing have to stay in step on large batches.
Clients can convert a batch into YOLO or pre-annotation format automatically. Pre-labeling reduced manual annotation effort by 60%.
Case study 02 · Annotation integrity
A clip’s extracted frame count and its annotation JSON can disagree. Frames referenced past the end of the video, duplicate frames, or boxes with missing values produce labeling tasks that look valid and are wrong.
Validation sits between extraction and export. Frame indices are checked against the extracted count, bounding boxes must be complete, and task metadata is carried into the YOLO or pre-annotation file. Batches that fail the check are held back with a reason.
Trimmed clips, dropped frames during segmentation, and detections that return no box all look similar in the output file. The check has to tell a real object with a bad box apart from a frame that should not exist.
Export handles missing bounding boxes and task metadata explicitly, so annotators receive tasks that still match the media. The same checks are in the frame-validation demo below.
Case study 03 · Batch workflows
Onboarding, questionnaires, task creation, and annotation all run as batches. One bad file or one failed API call used to force a person to find the failure and restart the work.
I integrated REST and gRPC for task creation, batch management, and annotation workflows, and wrote API automation that fetches, filters, and syncs tasks across environments. Each unit of work is recorded as success or failure, with retries and logs. File processing runs multithreaded where the work is I/O bound.
A retry must not create a second task for an object that already succeeded. Environment differences mean the same batch can pass in one place and fail in another, so logs have to say which environment and which id failed.
Operators get a batch they can rerun from the failed items, with an audit trail, instead of a script that stops on the first error. The batch monitor demo shows that control loop.
Case study 04 · APIs and cloud storage
Media and tabular data were crossing too many manual steps: upload, check, process, store, then hand off to the portal or the next system. Each handoff was a place to lose a file or skip a validation.
Python services tie the client portal, REST and gRPC APIs, and Google Cloud Storage together. ETL validates CSV, JSON, Excel, and multimedia before processing. The same pattern showed up on the banking GenAI system: search, scrape, validate, score, and deliver a structured record.
Large objects fail partway through. Transient storage and API errors should retry; bad formats and missing required fields should not. The pipeline has to report both without marking the whole batch as done.
Onboarding through pre-annotation is an automated path with less manual intervention, and downstream systems receive structured output instead of a folder of raw files.
How the pipelines are shaped, from the first file to a result someone can use, and how a one-off script becomes something I would run in production.
Ingestion, validation, processing, storage, and delivery stay separate so a failure has one place to land.
Prove the transform on one file: one video, one spreadsheet, one API call.
Reject bad frames, missing boxes, and incomplete rows before anything is written.
Stable ids, a worker limit, and retries only for transient errors.
Cloud storage, REST or gRPC, and the portal or queue that consumes the output.
Logs, a success and failure summary, and a rerun that continues where the last one stopped.
Short notes on failures I have had to unwind in these pipelines, and the check I use the next time.
When a pipeline dies on the first call, I split the failure in two before I change any code. An HTTP 401 or 403 on the task or batch API is an authorization problem: wrong environment, expired bearer token, or a scope that cannot create tasks. A call that authenticates and then cannot load weights is a model-access problem: a gated Hugging Face repo, a missing local path, or a token that can call our API and still cannot read the model.
I log the status code, the endpoint, and which environment supplied the token. Retries are only for timeouts and 5xx. An auth failure stops the batch immediately, because repeating it just burns the quota and hides the real error under a pile of identical lines.
A loop that writes back onto the source file is how a large run becomes unrecoverable. I read in chunks, validate each record, append successes to a new artifact, and append failures to an error file with the record id and the reason. The success file is the checkpoint: a rerun skips ids already listed there.
Concurrency stays on the I/O: uploads, downloads, and API calls. The validation itself stays simple and single-purpose so a bad row fails that row, not the worker. CSV, JSON, Excel, and media each get their own check, and the batch summary is success count, failure count, and the error file path.
After FFmpeg and FFprobe, I treat the extracted frame count as the source of truth for that clip. Every annotation frame index has to fall inside it. A box needs four numbers. A null box, a short box, or the same frame and label written twice is a data error, not a detection to export.
Out-of-range frames usually mean the clip was trimmed after the JSON was produced, or segmentation dropped frames and the indices were not rebuilt. I block the YOLO or pre-annotation export until the counts agree, and I keep the task metadata on the records that pass. You can run that check on sample data in the demo section.
A large upload rarely fails as a whole. Some objects land in cloud storage and some do not. I store a state per object key: stored, retrying, or failed. Timeouts and 503s get a bounded retry. A bad format or missing metadata is permanent and goes to a quarantine list with the reason.
The batch is finished only when every key is stored or explicitly failed. The next run reads that state and uploads the outstanding keys, so a rerun does not create duplicates of the files that already made it. The log line always includes the batch id, the object key, and the attempt number.
Decision 01
Decision 02
Decision 03
Decision 04
These run in the browser on sample data. They are the same checks and control loops as the pipelines above, and they are not connected to any client system.
Paste annotation JSON, or load the broken sample. The check compares frame indices, boxes, and duplicates with the clip’s frame count.
Software Engineer (External Consultant)
Building and improving Uber's Client Solutions Portal for end-to-end data onboarding, annotation, and workflow management for enterprise clients.
Python GenAI Developer
An AI-driven app that extracts, enriches, and validates project information using GenAI, search engines, and web scraping.
Python Developer
Jr. Python Developer
Python Trainee
B.Tech, Computer Science & Engineering, Jawaharlal Nehru Technological University, Hyderabad, 2022