Dự án xây dựng một hệ thống phát hiện hành vi bạo lực học đường từ camera, webcam, RTSP hoặc video tải lên. Khi phát hiện sự kiện bạo lực, hệ thống tự động tạo bằng chứng số, lưu metadata, tính mã băm SHA-256 và ghi dấu vết bằng chứng lên blockchain hoặc sổ cái cục bộ.
Chủ đề:
Nhận diện hành vi bạo lực và lưu giữ bằng chứng bất biến bạo lực học đường sử dụng công nghệ blockchain
- Nhận đầu vào từ webcam, RTSP, video stream hoặc video upload.
- Sử dụng YOLOv8 Pose để tracking người và trích xuất keypoints.
- Sử dụng mô hình PyTorch để phân loại hành vi đánh nhau.
- Hiển thị dashboard theo thời gian thực.
- Lưu thông tin incident vào SQLite.
- Tạo snapshot cho mỗi sự kiện bạo lực được phát hiện.
- Tạo metadata JSON cho từng incident.
- Tính
SHA-256cho file snapshot. - Tính
SHA-256cho metadata JSON. - Cho phép xác minh lại bằng chứng bằng cách so sánh hash đã lưu.
- Hỗ trợ sổ cái cục bộ dạng append-only tại
data/anchor-ledger.jsonl. - Có smart contract Solidity tại
contracts/EvidenceRegistry.sol. - Hỗ trợ chế độ
evm-localđể demo transaction smart contract ngay trên máy local. - Lưu thông tin file hash, metadata hash, anchor status, transaction hash hoặc ledger proof.
main.py: Flask app, dashboard, API và luồng xử lý nhận diện.fight_module/: module YOLO Pose và mô hình nhận diện đánh nhau.persistence.py: tầng lưu trữ SQLite.evidence_service.py: tạo snapshot, metadata và hash bằng chứng.anchor_service.py: ghi dấu bằng chứng lên local ledger hoặc EVM.contracts/EvidenceRegistry.sol: smart contract lưu hash bằng chứng.contracts/: ABI, bytecode và tài liệu contract.scripts/: script compile/deploy smart contract.tests/: test pipeline bằng chứng, upload, verify và EVM local.docs/: tài liệu phân tích, kế hoạch triển khai và nội dung poster.docs/assets/logo-banner.png: banner logo hiển thị ở đầu README.Nhan_dien_hanh_vi_bao_luc-1671020078-Nguyen_Duc_Dai.pptx: file PowerPoint logo/poster của dự án.
Yêu cầu Python 3.10.x.
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txtpython main.pyMở trình duyệt tại:
http://127.0.0.1:8000
Các thư mục sau được tạo tự động trong quá trình chạy:
data/: SQLite database, ledger cục bộ và dữ liệu upload.evidence/: snapshot và metadata JSON của các incident.
Các thư mục này là dữ liệu runtime nên không được đưa lên Git.
Chế độ mặc định hiện tại:
ANCHOR_MODE=evm-local
Chế độ này deploy smart contract EvidenceRegistry vào EVM test chain chạy ngay trong máy local, sau đó anchor bằng chứng bằng transaction thật. Không cần RPC bên ngoài, ví blockchain hoặc faucet.
Chế độ thay thế:
ANCHOR_MODE=local-ledger
Chế độ này ghi hash vào sổ cái cục bộ dạng append-only, phù hợp để demo nhanh hoặc kiểm thử khi không cần EVM.
Nếu muốn chuyển sang testnet thật, cần deploy contracts/EvidenceRegistry.sol, cấu hình RPC, private key và contract address trong .env, sau đó đặt:
ANCHOR_MODE=evm
ANCHOR_CHAIN_ID=<numeric chain id>
GET /api/status: trạng thái dashboard và danh sách incident gần nhất.GET /api/incidents: danh sách incident đã lưu.GET /api/incidents/<id>: chi tiết một incident.GET /api/incidents/<id>/verify: xác minh snapshot và metadata bằng hash.GET /api/incidents/<id>/chain-of-custody: xuất chuỗi lưu giữ bằng chứng.GET /api/incidents/<id>/export: xuất gói incident, hash, anchor và audit event dưới dạng JSON.GET /api/self-check: kiểm tra nhanh trạng thái DB, evidence root, ledger và Web3.
GET /: dashboard chính.GET /archive: kho lưu trữ các incident.GET /incidents/<id>: trang chain-of-custody của một incident.GET /raw: stream MJPEG của frame đang xử lý.GET /nvidia: kiểm tra thông tin GPU/CUDA nếu có.
Từ dashboard chính, người dùng có thể:
- Chạy nhận diện từ webcam.
- Chạy nhận diện từ RTSP hoặc URL stream.
- Upload video local và chạy nhận diện từ giao diện web.
Dự án có sẵn tài liệu phục vụ poster/logo:
Nhan_dien_hanh_vi_bao_luc-1671020078-Nguyen_Duc_Dai.pptxdocs/assets/logo-banner.pngdocs/poster-content.md
Các biến cấu hình chính:
YOLO_MODELFIGHT_MODELDEFAULT_CAMERA_INDEXDEFAULT_CAMERA_INPUTDATABASE_PATHEVIDENCE_ROOTANCHOR_MODEANCHOR_LEDGER_PATHANCHOR_CHAIN_IDANCHOR_EXPLORER_TX_BASEEVM_RPC_URLEVM_PRIVATE_KEYEVM_ACCOUNT_ADDRESSEVM_CONTRACT_ADDRESSEVIDENCE_REGISTRY_BYTECODE_PATH
Các ngưỡng nhận diện có thể cấu hình:
THRESHOLDCONCLUSION_THRESHOLDFINAL_THRESHOLD
Compile contract từ source:
python scripts/compile_evidence_registry.pyDeploy contract:
python scripts/deploy_evidence_registry.pyScript deploy đọc các file và biến cấu hình:
contracts/EvidenceRegistry.abi.jsoncontracts/EvidenceRegistry.bytecode.jsonEVIDENCE_REGISTRY_BYTECODE_PATHEVM_RPC_URLEVM_PRIVATE_KEYEVM_ACCOUNT_ADDRESSEVM_CONTRACT_ADDRESS
- Camera hoặc video gửi frame vào hệ thống.
- YOLOv8 Pose tracking người và trích xuất keypoints.
- Classifier PyTorch đánh giá hành vi đánh nhau.
- Khi phát hiện bạo lực, hệ thống tạo incident trong SQLite.
- Evidence service lưu snapshot và metadata JSON.
- Hệ thống tính
file_sha256vàmetadata_sha256. - Anchor service ghi payload hash vào local ledger hoặc smart contract EVM.
- Dashboard/API cho phép xem chi tiết, export JSON và xác minh lại bằng chứng.
Chạy test:
python -m unittestCác test hiện có kiểm tra:
- Pipeline tạo bằng chứng và xác minh local ledger.
- Trang incident và archive.
- Upload video hợp lệ/không hợp lệ.
- API self-check.
- Anchoring bằng EVM local nếu có bytecode contract.
- Không commit
.env, private key, database runtime, evidence snapshot hoặc video upload. - Không đưa ảnh/video nhạy cảm trực tiếp lên blockchain.
- Blockchain chỉ nên lưu hash, timestamp và metadata tối thiểu.
- File bằng chứng gốc nên lưu off-chain, sau đó dùng hash để xác minh tính toàn vẹn.
