Spaces:
Sleeping
Sleeping
File size: 6,132 Bytes
eabf2ba 436b436 eabf2ba 436b436 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | ---
title: Bookscope
sdk: gradio
app_file: app.py
pinned: false
tags:
- hackathon
- backyard-ai
- best-demo
- best-agent
- vision
- ocr
- minicpm-v
- codex
---
# Bookscope
Bookscope turns messy shelf photos into a searchable used-book inventory. It is built for the used bookstore problem: rotated spines, partial titles, mixed categories, and shelves that are valuable but hard to browse.
## Submission Links
- App: https://huggingface.co/spaces/build-small-hackathon/bookscope
- Demo video: TODO: add public demo video URL before the deadline
- Social post: TODO: add public social post URL before the deadline
- GitHub PR with Codex-attributed commits: https://github.com/SpanishPeacoq/bookscope/pull/1
- Team: `SpanishPeacoq`
## Hackathon MVP
The first working loop is intentionally small:
1. Upload or capture a shelf photo.
2. Extract visible book candidates into an editable table.
3. Enrich the rows with public book metadata from Open Library.
4. Correct uncertain rows as a human second pass.
5. Keep structured inventory rows, not raw shelf photos, by default.
The vision model is provider-swappable. In deployed mode, Bookscope defaults to the public `openbmb/MiniCPM-V-4.6-Demo` Space. For offline/local UI work, set `BOOKSCOPE_DEMO_MODE=true` to use built-in sample rows.
## Why This Exists
Used bookstores often contain valuable inventory that is hard to search because the shelves are physically chaotic: spines face different directions, categories are mixed, books are stacked horizontally, and titles are partially hidden. Bookscope treats scanning as an incremental workflow rather than a perfect one-shot OCR problem.
The first pass gives a fast machine read of the shelf. The second pass lets a person correct uncertain rows. Over time, repeated scans can converge into a more reliable shelf inventory without asking the store owner to reorganize the shelves first.
## How It Works
- MiniCPM-V 4.6 reads the uploaded shelf image and returns candidate title/author rows.
- Bookscope normalizes the model response into an editable Gradio table.
- The enrichment step searches Open Library by title and author.
- When available, it adds ISBN, first publish year, publisher, subjects, and an Open Library link.
- If a match is uncertain or missing, the row remains editable instead of pretending the inventory is solved.
## Prize Targets
- Backyard AI: practical daily-life tool for physical shelf inventory.
- Best MiniCPM Build: MiniCPM-V 4.6 is the core vision model.
- Best Use of Codex: the GitHub PR contains Codex co-authored commits.
- Best Agent: the app combines vision extraction, structured row normalization, metadata lookup, and human correction.
- Best Demo: the value is clearest in a before/after shelf scan.
All models used by Bookscope are under the 32B parameter limit. MiniCPM-V 4.6 is listed by the Build Small field guide as an image/OCR model around 1.3B parameters.
## Quick Start
```bash
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python app.py
```
Copy `.env.example` to `.env` for local development and set real values locally. Never commit secrets.
## Configuration
| Variable | Purpose |
| --- | --- |
| `HF_TOKEN` | Hugging Face token for the selected hosted model/provider. |
| `BOOKSCOPE_HF_MODEL` | Model or endpoint identifier used by `huggingface_hub.InferenceClient`. |
| `BOOKSCOPE_HF_PROVIDER` | Optional Hugging Face inference provider name. |
| `BOOKSCOPE_GRADIO_SPACE` | Optional Hugging Face Space name when the model is exposed through a Gradio demo. Defaults to `openbmb/MiniCPM-V-4.6-Demo`. |
| `BOOKSCOPE_GRADIO_API_NAME` | Gradio API endpoint name, usually `/predict` until inspected. |
| `BOOKSCOPE_GRADIO_INPUT_ORDER` | Space call shape: `minicpm_v46`, `image_prompt`, `prompt_image`, or `image`. |
| `BOOKSCOPE_DEMO_MODE` | Set to `true` for offline sample rows. Leave unset or set to `false` for live MiniCPM-V scans. |
## Privacy Boundary
Bookscope is designed to process shelf images transiently and save structured book rows. Raw images are not persisted by the current app.
Current image handling:
- Gradio receives the uploaded image for the current browser session.
- Bookscope converts it to an in-memory PIL image for scanning.
- Bookscope downsizes very large images before model calls to keep inference responsive.
- When calling the MiniCPM-V Gradio Space, Bookscope writes a temporary JPEG only long enough to send the request, then deletes that temporary file.
- Live MiniCPM-V mode sends the shelf image to the external `openbmb/MiniCPM-V-4.6-Demo` Space on Hugging Face. Bookscope controls its own temporary files, but it cannot control retention or logging inside that upstream public Space.
- The repo ignores local image and video files by default so test shelf photos do not enter Git.
- A future scan-session feature may optionally save thumbnails only when the user asks for audit/debug history.
For sensitive/private shelves, run Bookscope against a model endpoint you control instead of the public demo Space.
## Known Limits
- Wide shelf photos still produce mistakes, especially on tiny, blurry, or partially hidden spines.
- Cropping to one shelf band usually improves recognition.
- Open Library matches are useful but not authoritative; older editions and obscure used books may need manual correction.
- The current app does not persist scan sessions. It focuses on the fast demo loop: image in, candidate rows out, metadata enrichment next.
## Project Structure
```text
.
|-- app.py
|-- bookscope.py
|-- requirements.txt
|-- README.md
|-- AGENTS.md
|-- CONTRIBUTING.md
|-- SECURITY.md
|-- docs/
| |-- architecture.md
| `-- adr/
`-- .github/
```
## Built With Codex
The initial Gradio MVP was built with OpenAI Codex as an implementation collaborator. Commits for hackathon work should keep clear messages and include a Codex co-author trailer when appropriate.
## Status
Current status: reviewed Gradio MVP with live MiniCPM-V 4.6 scanning, Open Library enrichment, image-handling documentation, and regression tests for the main failure paths.
|