DmitrMakeev commited on
Commit
d57c72c
·
verified ·
1 Parent(s): 7858726

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -14
app.py CHANGED
@@ -666,26 +666,44 @@ def analyze_colors(image_bytes):
666
  image_bytes.seek(0)
667
  file_bytes = np.asarray(bytearray(image_bytes.read()), dtype=np.uint8)
668
  img = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR)
 
 
 
 
669
  hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
670
-
671
- # Обновлённые диапазоны HSV (Hue, Saturation, Value)
672
  color_ranges = {
673
- "green": ((36, 40, 40), (86, 255, 255)), # Зелёный
674
- "yellow": ((20, 100, 100), (30, 255, 255)), # Жёлтый
675
- "brown": ((10, 50, 20), (20, 150, 150)), # Коричневый
676
- "orange": ((5, 100, 100), (15, 255, 255)) # Оранжевый
677
  }
678
 
 
 
679
  total_pixels = img.shape[0] * img.shape[1]
680
- result = {}
681
 
682
  for color, (lower, upper) in color_ranges.items():
683
  mask = cv2.inRange(hsv, np.array(lower), np.array(upper))
684
- percent = int((cv2.countNonZero(mask) / total_pixels) * 100)
685
- result[color] = percent
686
-
687
- return result
688
-
 
 
 
 
 
 
 
 
 
 
 
 
689
 
690
  @app.route('/last_image', methods=['GET'])
691
  def get_last_image():
@@ -702,9 +720,11 @@ def get_last_image():
702
  image_copy.seek(0)
703
  return send_file(image_copy, mimetype='image/jpeg', download_name=latest_image["filename"])
704
 
705
- @app.route('/color_stats', methods=['GET'])
706
  def color_stats():
707
- return jsonify(latest_image["color_percentages"])
 
 
708
 
709
 
710
  @app.route('/view_image', methods=['GET'])
 
666
  image_bytes.seek(0)
667
  file_bytes = np.asarray(bytearray(image_bytes.read()), dtype=np.uint8)
668
  img = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR)
669
+
670
+ # Масштабируем изображение для ускорения обработки (опционально)
671
+ img = cv2.resize(img, (0,0), fx=0.5, fy=0.5)
672
+
673
  hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
674
+
675
+ # Точные диапазоны HSV (подбираются экспериментально)
676
  color_ranges = {
677
+ "green": ((35, 40, 40), (85, 255, 255)), # Зеленый
678
+ "yellow": ((22, 100, 100), (32, 255, 255)), # Желтый
679
+ "orange": ((10, 150, 150), (20, 255, 255)), # Оранжевый
680
+ "brown": ((5, 50, 20), (15, 150, 150)) # Коричневый
681
  }
682
 
683
+ # Создаем debug-изображение
684
+ debug_img = img.copy()
685
  total_pixels = img.shape[0] * img.shape[1]
686
+ results = {}
687
 
688
  for color, (lower, upper) in color_ranges.items():
689
  mask = cv2.inRange(hsv, np.array(lower), np.array(upper))
690
+
691
+ # Улучшаем маску морфологическими операциями
692
+ kernel = np.ones((5,5), np.uint8)
693
+ mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
694
+ mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
695
+
696
+ # Добавляем на debug-изображение
697
+ debug_img = cv2.addWeighted(debug_img, 0.7,
698
+ cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR), 0.3, 0)
699
+
700
+ percent = round((cv2.countNonZero(mask) / total_pixels * 100, 1)
701
+ results[color] = percent
702
+
703
+ # Сохраняем debug-изображение для анализа
704
+ cv2.imwrite('debug_colors.jpg', debug_img)
705
+
706
+ return results
707
 
708
  @app.route('/last_image', methods=['GET'])
709
  def get_last_image():
 
720
  image_copy.seek(0)
721
  return send_file(image_copy, mimetype='image/jpeg', download_name=latest_image["filename"])
722
 
723
+ @app.route('/color_stats')
724
  def color_stats():
725
+ stats = latest_image["color_percentages"]
726
+ print(f"Raw color stats: {stats}") # Для отладки в консоли
727
+ return jsonify(stats)
728
 
729
 
730
  @app.route('/view_image', methods=['GET'])