A novel to view products for sale!
Second.Rendition.Side.by.Side.mp4
Ever wished you could spice up your online shopping experience? With KoroKoro, sellers can casually snap a 360-degree video of their product, and voila, we turn it into a nifty 3D version. What makes KoroKoro chill is that it's all about showcasing products in this cool 3D space for a laid-back online shopping vibe. Check it out and add some playful zest to your e-commerce journey! Welcome to the technical details of KoroKoro backend implementation.
For the front-end, check here
- Docker
- NVIDIA Graphics Card
- Supabase
- Google Colab
- Supabase
# Clone this repo
git clone https://github.com/KoroKoro.git
cd KoroKoro
# Build with docker
docker build -t korokoro:latest .
# Run image
docker run -it --gpus all korokoro:latest
Running the image will fetch products from the queue in Supabase and generate 3D models
# Clone image from Docker Hub
docker pull daheer/korokoro:v0
# Run image
docker run -it --gpus all daheer/korokoro:v0
!git clone https://github.com/KoroKoro.git
!pip install condacolab
import condacolab
condacolab.install()
!sudo ln -s /opt/conda/root/etc/profile.d/conda.sh /etc/profile.d/conda.s
%cd KoroKoro
!bash setup.sh
%%shell
eval "$(/usr/local/condabin/conda shell.bash hook)"
conda activate korokoro
python KoroKoro/pipeline/stage_01.py
python KoroKoro/pipeline/stage_02.py
📦KoroKoro
├─ Dockerfile
├─ KoroKoro
│ ├─ __init__.py
│ ├─ components
│ │ ├─ __init__.py
│ │ ├─ data_ingestion.py
│ │ ├─ data_processing.py
│ │ ├─ data_transformation.py
│ │ ├─ initialization.py
│ │ ├─ model_trainer.py
│ │ └─ post_processing.py
│ ├─ config
│ │ ├─ __init__.py
│ │ └─ configuration.py
│ ├─ entity
│ │ └── __init__.py
│ ├─ logging.py
│ ├─ pipeline
│ │ ├── __init__.py
│ │ ├── stage_01.py
│ │ └── stage_02.py
│ └─ utils
│ ├─ __init__.py
│ └─ constants.py
├─ config
│ └── config.yaml
├─ docker-compose.yml
├─ setup.py
└─ setup.sh
After recording a 360-degree video around a subject product, I leverage NerfStudio's video-data processor to generate a NeRF-compatible dataset. This dataset comprises extracted frames from the video and Colmap data, including the essential transforms.json file. This file encompasses rotation and translation data along with camera intrinsics, all crucial for NeRF rendering.
To isolate the subject object (pun intended), I use various techniques including YOLOv8, Segment-Anything(SAM), OWL-ViT & the more traditional OpenCV. See algorithm below
if object in coco_classes:
detect_with_yolo()
if successful():
segment_with_sam()
else:
detect_with_owlvit()
if successful():
segment_with_sam()
else:
process_with_cv2()
else:
detect_with_owlvit()
if successful:
segment_with_sam()
else:
process_with_cv2()
I utilize NVIDIA's Instant NGP to train and render a MLP with multiresolution hash input encoding using the tiny-cuda-nn framework and afterwards, save the resulting .obj file.
Supabase is the platform of choice due to it's rich features that allow for maximum productivity.
Every product is assigned a unique_id which serves as a reference through out the system. I split every resulting .obj file into parts on the back-end to efficiently store them on KoroKoro's Supabase Bucket and piece the parts together in the front-end.
There are many areas where this project needs improvement. And I shall utilize weekends to have fun checking the following:
-
Lighterweight .obj files -> right now, the resulting obj models are heavy (> 100MB) and I have to use sharding to save them in Supabase's storage bucket which limits file uploads to 50MB
-
Better quality models -> I'm still experimenting with multiple ways of performing Colmap to do better Sift Extraction and would welcome any help. I'm also looking at other NeRF render options
-
Use Segment Anything to improve segmentation
-
More features on the frontend are always welcome if that's what you're into!
Please reach out to me @ [email protected], I'd be happy to walk you through the project, including the Supabase database configuration