Tokens
Track, visualize, and compete on AI coding assistant token usage across Claude Code, Cursor, OpenCode, Codex, Gemini, Kimi, and Qwen. The Kardashev Scale for AI Devs.
Biết lô nào cần kiểm tra, bỏ qua lô không cần: sàng lọc EUDR cho danh sách lô cà phê Tây Nguyên bằng dữ liệu vệ tinh mở và bản đồ diễn biến rừng 2020. Know which plots to check: EUDR screening for cof
Translation pending
DataJavaScript · PythonGitHub @pdlong-09OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
vEUDR: EUDR screening for coffee plot lists in Vietnam's Central Highlands (static web app) · Sàng lọc EUDR cho danh sách lô cà phê Tây Nguyên
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Phiên bản của Phạm Duy Long · GitHub @pdlong-09 · công bố 27/10/2026
Version published and maintained by Phạm Duy Long. Nhận diện và cách kiểm chứng: SIGNATURE.md
Công cụ giúp doanh nghiệp cà phê sàng lọc danh sách lô của nông hộ theo EUDR. Trang không cấp chứng nhận tuân thủ. Nó chỉ ra lô nào cần kiểm tra, chuẩn bị bằng chứng vệ tinh và lưu kết quả kiểm tra của từng lô.
Trang web có nhiều trang, mỗi trang có địa chỉ riêng (dùng được nút quay lại của trình duyệt):
| Trang | Địa chỉ | Nội dung |
|---|---|---|
| Trang chủ | #/ | Giới thiệu cho doanh nghiệp: vấn đề, 4 bước, con số từ nghiên cứu, giới hạn |
| Bản đồ | #/ban-do | Ảnh nền (bản đồ, vệ tinh mới nhất, vệ tinh theo năm Esri Wayback 2016–2026), lô rừng 2020 của tnr.vnforest.gov.vn, lớp sàng lọc 500 m, ranh giới xã, lô nghiên cứu |
| Danh sách lô | #/danh-sach | Tải lên, phễu kiểm tra, bảng lô, hồ sơ từng lô |
| Thực địa | #/thuc-dia | Kế hoạch đi thực địa theo xã, GPX |
| Báo cáo | #/bao-cao | Tổng hợp theo mức và theo xã, tiến độ, lỗi dữ liệu, xuất CSV / GPX / hồ sơ in |
| Phương pháp | #/phuong-phap | Cách xếp mức, kiểm chứng với 1000 lô có nhãn, giới hạn |
| Dữ liệu | #/du-lieu | Nguồn và giấy phép từng lớp dữ liệu |
ma_lo, vi_do, kinh_do, có thể thêm ho_dan, xa, dien_tich_ha; dấu phân cách , hoặc ;, chấp nhận dấu phẩy thập phân) hoặc GeoJSON (điểm hoặc đa giác, kể cả tên thuộc tính của tệp nộp EUDR: ProductionPlace, ProducerName, Area).
Danh sách và kết quả kiểm tra chỉ lưu trong trình duyệt (localStorage), không gửi lên máy chủ nào. Muốn lưu lâu dài thì xuất tệp.
Tính trên lưới mẫu 500 m. Với lô đa giác, dùng mọi điểm lưới nằm trong lô. Với lô điểm hoặc lô nhỏ, dùng điểm lưới gần nhất.
| Mức | Điều kiện |
|---|---|
| Cao | Có mất tán cây sau 2020 (Hansen 2021–2025 hoặc JRC TMF), ở nơi ít nhất một bản đồ gọi là rừng năm 2020: GFC2020 V4, JRC TMF, Hansen, ESA WorldCover, hoặc bản đồ diễn biến rừng 2020 (tnr.vnforest.gov.vn) |
| Trung bình | Không có mất tán, nhưng các bản đồ không thống nhất về rừng năm 2020, hoặc GFC2020 V1 khác V4, hoặc mọi bản đồ đều gọi là rừng (lô cà phê ở đó là bất thường) |
| Thấp | Không bản đồ nào, kể cả bản đồ quốc gia, gọi là rừng năm 2020, và không có mất tán |
So với 1000 lô nghiên cứu có nhãn tham chiếu: cả 110 lô không tuân thủ đều ở mức Cao, không lô nào trong 177 lô mức Trung bình hoặc Thấp. Nhưng 46% lô mức Cao vẫn tuân thủ, nên mức Cao nghĩa là "cần xem", không phải "vi phạm". Mẫu nghiên cứu được chọn có chủ đích, nên các tỷ lệ này không đại diện cho diện tích. Đây cũng là lý do vẫn phải kiểm tra ngẫu nhiên các mức thấp hơn.
.venv/Scripts/python webapp/build_data.py --sheets # public/data (~6 MB) và public/sheets (~154 MB)
PYTHONUTF8=1 .venv/Scripts/python webapp/build_lots.py # public/data/lots/{z}/{x}/{y}.pbf: 892.942 lô rừng 2020, vài phút
python webapp/serve.py # http://127.0.0.1:8765
node webapp/test_ui.mjs [thư mục ảnh chụp] # kiểm tra tự động bằng Edge headless
Tệp trong public/data | Nội dung |
|---|---|
grid.png | Lưới 500 m (218.401 điểm), mã hóa thành bit: GFC2020 V1–V4, TMF, Hansen, WorldCover, năm mất tán, tỉnh, loại lô rừng 2020 của bản đồ quốc gia (xem đầu build_data.py) |
lots/{z}/{x}/{y}.pbf | Lô rừng 2020 của 5 tỉnh (tnr.vnforest.gov.vn) dạng vector tile không nén, mức phóng 11–13 (phóng to hơn thì dùng lại tile mức 13): tiểu khu, khoảnh, lô, diện tích, loại đất loại rừng, nguồn gốc, quy hoạch, mục đích sử dụng, chủ rừng, loài cây, năm trồng, địa giới cũ |
items.geojson | 1780 lô nghiên cứu: ranh giới, chỉ số bản đồ, NDVI, nhãn tham chiếu (ghi nguồn người hay mô hình), xác suất của mô hình chuỗi thời gian |
communes.geojson | 264 xã sau sáp nhập 07/2025 phủ vùng 5 tỉnh (sapnhap.bando.com.vn, qua vietnamese-provinces-database, MIT), đã đơn giản hóa |
danh_sach_lo_mau.csv | Danh sách mẫu: 580 lô cà phê 1 ha của nghiên cứu, cộng 4 dòng lỗi cố ý để thử phần kiểm tra dữ liệu |
meta.json | Thống kê theo tỉnh, bảng mức ưu tiên so với nhãn tham chiếu |
Bản đồ diễn biến rừng 2020 lấy từ dịch vụ WFS công khai của tnr.vnforest.gov.vn và ghi nguồn trên trang. Cần xác nhận điều khoản sử dụng với Cục Kiểm lâm trước khi công khai rộng. Bản đồ cà phê FDP và Nature Trace không được đưa lên.
Thư mục webapp/ là repo datrich/veudr-web (riêng tư, nối với Cloudflare), có bản sao công khai pdlong-09/veudr-web. Repo cha LLM_4_deforest bỏ qua thư mục này (khai báo trong .git/info/exclude). Cloudflare Pages đọc repo và phục vụ thư mục public/ như trang tĩnh, không cần bước build. Mỗi lần git push lên nhánh main, Cloudflare tự triển khai lại.
Có hai cách cài trên dashboard Cloudflare (tài khoản đang quản lý smlcloud.online). Repo hỗ trợ cả hai.
Cách A, Workers (giao diện mặc định hiện nay): Workers & Pages → Create → Import a repository → datrich/veudr-web. Project name veudr-web (phải trùng name trong wrangler.jsonc), Build command để trống, Deploy command npx wrangler deploy. Sau khi deploy: Settings → Domains & Routes → Add → Custom domain → veudr.smlcloud.online. Cấu hình nằm ở wrangler.jsonc (phục vụ tĩnh thư mục public/, đường dẫn không tồn tại trả về 404.html).
Cấu hình đang chạy (19/10/2026): Worker veudr-web (Workers static assets). Tên miền dùng bản ghi DNS AAAA veudr → 100:: (Proxied) cộng Workers Route veudr.smlcloud.online/* → veudr-web, không dùng "Custom domain". Lý do: custom domain được tạo trên dashboard nhưng bản ghi DNS của nó không được phát ra trong hơn 20 phút. Không bật địa chỉ workers.dev.
Kiểm tra trang thật: BASE=https://veudr.smlcloud.online/ node test_ui.mjs (34 kiểm tra; ngày 19/10/2026 đạt toàn bộ).
Cách B, Pages:
datrich/veudr-web.public, nhánh main. Bấm Save and Deploy.veudr.smlcloud.online. DNS đã nằm ở Cloudflare nên bản ghi CNAME được tạo tự động; chứng chỉ HTTPS có sau vài phút.Cập nhật dữ liệu hoặc mã: chạy lại build_data.py hoặc build_lots.py nếu cần, kiểm tra bằng serve.py và test_ui.mjs, rồi git add -A && git commit && git push.
Giới hạn của Cloudflare Pages cần nhớ: mỗi tệp tối đa 25 MiB, mỗi lần triển khai tối đa 20.000 tệp. Thư mục tile và 1780 ảnh bằng chứng nằm trong giới hạn này. public/_headers đặt thời gian cache cho tile và ảnh. public/404.html làm cho đường dẫn không tồn tại (tile trống) trả về lỗi 404 thay vì trang chủ.
Cùng nội dung public/ còn được phục vụ trên server chạy vigil.green, ở tên miền phụ veudr.vigil.green. Web vigil.green và các dịch vụ Docker trên server không bị động tới.
/etc/nginx/sites-available/veudr, nghe cổng 80 với server_name veudr.vigil.green, gốc /var/www/veudr/current. Cloudflare của zone vigil.green đứng trước làm HTTPS, giống vigil.green. Nội dung cấu hình nằm trong deploy_vps.py.VPS_HOST=<ip> VPS_PW=<mật khẩu> python deploy_vps.py.
/var/www/veudr/releases/ rồi chuyển liên kết current trong một bước. Giữ 3 bản gần nhất.ln -sfn /var/www/veudr/releases/<bản> /var/www/veudr/current.--nginx để cài lại cấu hình nginx, --full để gửi lại tất cả.A veudr → <IP server>, Proxied.BASE=https://veudr.vigil.green/ node test_ui.mjs. Trước khi DNS có hiệu lực, có thể kiểm tra thẳng server: BASE=http://veudr.vigil.green/ EDGE_ARGS="--host-resolver-rules=MAP veudr.vigil.green <IP>" node test_ui.mjs.Giai đoạn 1 (trang này, chỉ gồm tệp tĩnh) đang chạy trên Cloudflare Pages như trên, chi phí bằng 0. Trước khi dùng công khai lâu dài, cần kiểm tra điều khoản của ảnh Esri và của bản đồ diễn biến rừng 2020.
Giai đoạn 2 (tính trên đúng ranh giới lô bất kỳ). Cần API riêng (FastAPI, Docker, PostGIS). Với mỗi lô mới, API:
Nguồn ảnh: Google Earth Engine (dùng thương mại phải trả phí) hoặc Copernicus Data Space / openEO. Cần VPS 2–4 vCPU, 4–8 GB RAM và object storage.
Trước khi áp dụng cho doanh nghiệp, cần kiểm chứng mô hình trên một mẫu lô thật có ranh giới thật. Mô hình hiện được huấn luyện trên vùng cảnh báo và ô vuông 1 ha.
Giai đoạn 3 (doanh nghiệp dùng thật).