Tokens
Claude, Cursor 등 AI 코딩 도우미 토큰 사용량을 추적·시각화·경쟁
위성 데이터와 2020년 숲 변화 지도 활용해 서부산지 커피 플롯을 선별합니다
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
데이터JavaScript · PythonGitHub @pdlong-09가동 상태 재확인 필요운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
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).