Inspiration

Visitors and foreign residents can struggle to understand Japanese OTC medicine packaging. Translation alone does not establish whether a medicine is appropriate or may cross a border. Kusuri Lens makes label facts, original sources, and uncertainty visible instead of guessing.

What it does

Photograph a package, run OCR in the browser, and review the complete printed product name, including any suffix. The prototype proposes a curated catalog candidate only after an exact full-name match; the user must confirm the package before opening its record.

The demo covers five Japanese OTC products, English and Japanese, and the United States as the destination. It displays source-checked active ingredients and amounts with their label basis, official source links, and check dates. It compares ingredient names without claiming dose equivalence or interchangeable medicines. A narrow ingredient-level alert highlights a regulated ingredient, while import permission remains unverified and must be checked with authorities. Unknown packages are declined, with a card to show a pharmacist.

How we built it

A FastAPI backend serves a curated JSON catalog and a responsive PWA. Tesseract.js performs browser-side OCR; package photos are not uploaded. Only reviewed text is sent for catalog matching. The live demo uses Render Free and does not require paid LLM inference. Development was AI-assisted, and the demo video uses AI-generated English narration with captions. Medication facts come from curated sources, not free-form model answers.

Challenges and accomplishments

A product suffix can distinguish a different formulation. Substring matching was therefore rejected in favor of full-input equality after limited normalization, preserving meaningful symbols. Forty-two API/data and real-browser regression checks cover exact-name boundaries, separately attributed shared-ingredient amounts in both selector orders, stale scan/OCR results, network failures, offline-shell recovery, and inconsistent match-service responses. These are software checks, not clinical validation or an OCR accuracy study.

A shared ingredient is not a shared dose basis. Comparison keeps each label’s amount and unit separate rather than presenting one number for both products. Editing or replacing an input immediately clears old results; failed network calls are not shown as an unknown medicine. The browser also rejects inconsistent match responses and uses only canonical names from its loaded exact-name catalog.

The result is a working bilingual prototype with provenance cards, ingredient comparison, and three demonstration paths: a confirmed catalog record, an ingredient-level travel alert, and an unknown-package refusal. The submission ZIP includes the source, full Code PDF, one-page project PDF, screenshots, video, and subtitles. The GitHub repository remains private; the Code PDF is supplied as the event-permitted alternative.

What we learned and what is next

The useful output is not just a translation: it is a checkable source, an explicit unit, and a clear boundary on what has not been established. Before expanding coverage, the next steps are real-package OCR testing, pharmacist review, and country-specific primary-source review.

Safety boundary

This is a limited demonstration, not medical or legal advice or clinical validation. OCR and human confirmation can be wrong. It does not establish dosage, safety, equivalence, or legal import permission. Stop if the package is uncertain; consult a pharmacist and the relevant destination authorities.

Built With

Share this project:

Updates

Submission history