Spaces:
Running
Running
| from flask import Flask, render_template, request, jsonify, send_file | |
| import json | |
| import os | |
| from pathlib import Path | |
| app = Flask(__name__) | |
| # WAŻNE: ustaw ścieżkę POPRAWNIE (zależy gdzie masz folder) | |
| DATASET_PATH = Path(__file__).parent.parent.parent / 'dataset' / 'dataset.json' | |
| RAW_DATA_PATH = Path(__file__).parent.parent.parent / 'dataset' / 'raw_data' | |
| print(f"Dataset path: {DATASET_PATH}") | |
| print(f"Raw data path: {RAW_DATA_PATH}") | |
| def load_dataset(): | |
| with open(DATASET_PATH, 'r', encoding='utf-8') as f: | |
| return json.load(f) | |
| def save_dataset(data): | |
| with open(DATASET_PATH, 'w', encoding='utf-8') as f: | |
| json.dump(data, f, indent=2, ensure_ascii=False) | |
| def index(): | |
| dataset = load_dataset() | |
| return render_template('labeling.html', total_auctions=len(dataset)) | |
| def serve_image(image_path): | |
| """Serwuj zdjęcie""" | |
| full_path = RAW_DATA_PATH / image_path | |
| print(f"Szukam: {full_path}") | |
| if full_path.exists(): | |
| return send_file(full_path) | |
| return "Not found", 404 | |
| def next_unlabeled(): | |
| dataset = load_dataset() | |
| for i, auction in enumerate(dataset): | |
| if auction.get('label_confidence', 0) == 0: | |
| # Przygotuj WSZYSTKIE zdjęcia | |
| images = [] | |
| for img_name in auction['images']: | |
| img_path = f"{auction['folder_path']}/{img_name}" | |
| images.append(f"/image/{img_path}") | |
| return jsonify({ | |
| 'index': i, | |
| 'id': auction['id'], | |
| 'title': auction['title'], | |
| 'description': auction['description'][:300] + '...', | |
| 'platform': auction['platform'], | |
| 'link': auction['link'], | |
| 'parameters': auction.get('parameters', {}), | |
| 'images': images, | |
| 'total': len(dataset), | |
| 'current': i + 1 | |
| }) | |
| return jsonify({'error': 'Wszystkie aukcje etykietowane!'}) | |
| def save_label(): | |
| data = request.json | |
| dataset = load_dataset() | |
| auction_index = data['auction_index'] | |
| dataset[auction_index]['label'] = data['label'] | |
| dataset[auction_index]['label_confidence'] = data['confidence'] | |
| save_dataset(dataset) | |
| return jsonify({'status': 'ok'}) | |
| def get_stats(): | |
| dataset = load_dataset() | |
| total = len(dataset) | |
| labeled = len([a for a in dataset if a.get('label_confidence', 0) > 0]) | |
| unlabeled = total - labeled | |
| by_label = { | |
| 'ORIGINAL': len([a for a in dataset if a.get('label') == 0]), | |
| 'SCAM': len([a for a in dataset if a.get('label') == 1]), | |
| 'REPLICA': len([a for a in dataset if a.get('label') == 2]) | |
| } | |
| return jsonify({ | |
| 'total': total, | |
| 'labeled': labeled, | |
| 'unlabeled': unlabeled, | |
| 'by_label': by_label, | |
| 'progress': round(labeled / total * 100, 1) if total > 0 else 0 | |
| }) | |
| if __name__ == '__main__': | |
| app.run(debug=True, port=5000) | |