File size: 5,953 Bytes
c6c1555 9356719 c6c1555 c61e658 1d126af c6c1555 c61e658 2c10653 761b621 32140a3 c763e86 4265296 5cce3eb c61e658 5cce3eb 4265296 5cce3eb 4265296 5cce3eb cfc42ff c6c1555 32140a3 275c5a0 32140a3 c6c1555 4265296 32140a3 4265296 c763e86 74ee71d c763e86 240da74 c763e86 43b7bbd c763e86 c6c1555 15e430c 32140a3 beb96e7 32140a3 af036a2 c6c1555 cfc42ff |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import streamlit as st
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLO model
wght = 'best.pt'
model = YOLO(wght)
mn = {
0: '',
1: '',
2: '',
3: '',
4: 'НАРУШЕНИЕ',
5: 'НАРУШЕНИЕ',
6: 'НАРУШЕНИЕ',
7: 'НАРУШЕНИЕ',
8: 'НАРУШЕНИЕ',
9: ''
}
def greet(image):
# Run inference on an image
results = model(image) # results list
# Visualize the results
for i, r in enumerate(results):
r.names = mn
# Plot results image
im_bgr = r.plot(line_width=3, font_size=22, labels=True, conf=True) # BGR-order numpy array
im_rgb = im_bgr[..., ::-1] # Convert BGR to RGB
return im_rgb
def main():
st.markdown("### YOLOv9-c и API Streamlit 1280x1280 с весами детекции СИЗ УРАЛ ЗАВОДА для территории: склада, снаружи склада, курилка день/ночь на ближней дистанции. Детекция снимков")
st.write("YOLOv9-c - мощная универсальная одноэтапная модель детекции. Это самая быстрая и надежная версия YOLO от Ultralytics на 2024 год. Легко обучаема и настраиваема.")
st.write("Streamlit - это API пользовательского интерфейса для обработки изображений, но его также можно адаптировать для работы с видео. И/или заменить на технический (Fast API, Django, Flask) для взаимодействия между программами протоколом HTTP.")
st.write("")
st.markdown("##### Классы:")
st.write("- ['Каска', 'Перчатка', 'Обувь', 'Одежда', 'Рабочие']")
st.write("- ['Курение', 'Каска. Нарушение', 'Перчатка. Нарушение', 'Обувью Нарушение', 'Одежда. Нарушение']")
st.write("")
# Display instruction text
st.markdown("##### Инструкция:")
st.write("1. Загрузите свое изображение, используя кнопку 'Upload an image'.")
st.write("2. После загрузки изображения результаты обработки отобразятся ниже.")
st.write("")
# Add a button to upload an image
uploaded_image = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])
# Process the uploaded image if available
if uploaded_image is not None:
st.write("В результате будет детектированный снимок. Все найденные объекты выделены ограничивающей рамкой (баундинг боксом). И идентифицированы опеределенным классом - цветом рамки.")
image = Image.open(uploaded_image)
st.image(greet(image), caption='Processed Image', use_column_width=True)
st.write("Отсутствие средств индивидуальной защиты или курение считается нарушением и дополнительно выделяется предупреждением 'НАРУШЕНИЕ' над прямоугльником.")
st.write("")
st.markdown("##### Рекомендации:")
st.write("- Размер снимка равен или более 1280x1280.")
st.write("- Снимок с камер УРАЛ ЗАВОДА: склада, снаружи склада, курилка день/ночь.")
st.write("- Чем ближе объект - тем выше шанс детекции. Если объект далеко, можно масштабировать зону поиска.")
st.write("")
st.write("Результаты теста на независимых данных про соблюдении рекомендациий.")
# Пути к изображениям
image1_path = 'confusion_matrix_normalized.png'
image2_path = 'PR_curve.png'
# Делаем две колонки
col1, col2 = st.columns(2)
# Отображаем изображения в каждой колонке
with col1:
st.image(image1_path, caption='Матрица ошибок', use_column_width=True)
with col2:
st.image(image2_path, caption='Соотношение точности к полноте', use_column_width=True)
st.markdown("##### Примерный результат работы модели на кадр без веб интерфейса:")
st.write("0: 960x1280 1 Каска, 2 Перчаткаs, 2 Обувьs, 3 Одеждаs, 4 Каска. Нарушениеs, 1 Обувью Нарушение, 2 Одежда. Нарушениеs, 5 Рабочиеs, 86.8ms Speed: 30.1ms preprocess, 86.8ms inference, 2.3ms postprocess per image at shape (1, 3, 960, 1280)")
st.write("")
st.markdown("##### Итоговая скорость на один снимок:")
st.write("30.1 мс + 86.8 мс + 2.3 мс = 119.2 мс")
st.write("1000 мс / 119.2 мс = 8.38 кадра в секунду")
st.write("")
st.write("")
st.write("Но даже при соблюдении всех рекомендаций бывают исключения, когда детекция не срабатывает, а в плохих условиях работает. Моделей с 100% точностью не бывает.")
st.write("Спасибо за внимание!")
st.write("Автор: https://t.me/dtatarintsev")
st.write("GitHub проекта: https://github.com/NeuronsUII/Zavod_Ural_n/tree/main/dtatarintsev")
if __name__ == '__main__':
main()
|