Felguk commited on
Commit
7ad4f69
·
verified ·
1 Parent(s): 2122c44

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -41
app.py CHANGED
@@ -27,7 +27,7 @@ client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
27
  model = fasterrcnn_resnet50_fpn(weights="DEFAULT")
28
  model.eval()
29
 
30
- # Функция для обработки PDF
31
  def process_pdf(file):
32
  pdf_reader = PyPDF2.PdfReader(file)
33
  text = ""
@@ -35,12 +35,10 @@ def process_pdf(file):
35
  text += page.extract_text()
36
  return text
37
 
38
- # Функция для обработки изображений
39
  def process_image(file):
40
  image = Image.open(file)
41
  return f"Изображение: {image.size[0]}x{image.size[1]} пикселей, формат: {image.format}"
42
 
43
- # Функция для обработки видео
44
  def process_video(file):
45
  cap = cv2.VideoCapture(file.name)
46
  frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
@@ -48,60 +46,45 @@ def process_video(file):
48
  cap.release()
49
  return f"Видео: длительность {duration:.2f} секунд, {frame_count} кадров"
50
 
51
- # Функция для обработки аудио
52
  def process_audio(file):
53
  audio = AudioSegment.from_file(file)
54
  return f"Аудио: длительность {len(audio) / 1000:.2f} секунд, частота {audio.frame_rate} Гц"
55
 
56
- # Функция для обработки текстового файла
57
  def process_txt(file):
58
  with open(file.name, "r", encoding="utf-8") as f:
59
  text = f.read()
60
  return text
61
 
62
- # Функция для удаления фона с изображения
63
  def remove_background(image):
64
  if image is None:
65
  return "**Ошибка:** Чем я буду удалять, если ты не загрузил изображение?"
66
  output = remove(image)
67
  return output
68
 
69
- # Функция для определения количества объектов на изображении
70
  def count_objects(image):
71
  if image is None:
72
  return "Изображение не загружено."
73
-
74
- # Преобразование изображения в формат, подходящий для модели
75
  img = Image.open(image.name).convert("RGB")
76
  img_tensor = F.to_tensor(img).unsqueeze(0)
77
-
78
- # Обнаружение объектов
79
  with torch.no_grad():
80
  predictions = model(img_tensor)
81
-
82
- # Подсчет количества объектов
83
  num_objects = len(predictions[0]['labels'])
84
  return f"Количество объектов на изображении: {num_objects}"
85
 
86
- # Функция для конвертации изображения
87
  def convert_image(image, target_format):
88
  if image is None:
89
  return None
90
  img = Image.open(image.name)
91
-
92
- # Создаем временный файл
93
  with tempfile.NamedTemporaryFile(delete=False, suffix=f".{target_format.lower()}") as tmp_file:
94
  img.save(tmp_file, format=target_format)
95
  return tmp_file.name
96
 
97
- # Функция для определения языка текста
98
  def detect_language(text):
99
  try:
100
  return detect(text)
101
  except:
102
- return "en" # По умолчанию английский
103
 
104
- # Функция для обработки сообщений, истории и файлов
105
  def respond(
106
  message,
107
  history: list[tuple[str, str]],
@@ -111,7 +94,6 @@ def respond(
111
  top_p,
112
  file=None,
113
  ):
114
- # Если загружен файл, обрабатываем его
115
  if file is not None:
116
  file_type = file.name.split(".")[-1].lower()
117
  if file_type == "pdf":
@@ -128,29 +110,21 @@ def respond(
128
  file_info = "Неизвестный тип файла"
129
  message += f"\n[Пользователь загрузил файл: {file.name}]\n{file_info}"
130
 
131
- # Определяем язык сообщения
132
  language = detect_language(message)
133
-
134
- # Добавляем системное сообщение с учетом языка
135
  if language == "ru":
136
  system_message = "Вы дружелюбный чат-бот, который понимает русский язык."
137
  else:
138
  system_message = "You are a friendly chatbot."
139
 
140
- # Добавляем системное сообщение
141
  messages = [{"role": "system", "content": system_message}]
142
-
143
- # Добавляем историю сообщений
144
  for val in history:
145
  if val[0]:
146
  messages.append({"role": "user", "content": val[0]})
147
  if val[1]:
148
  messages.append({"role": "assistant", "content": val[1]})
149
 
150
- # Добавляем текущее сообщение пользователя
151
  messages.append({"role": "user", "content": message})
152
 
153
- # Генерация ответа с использованием модели HuggingFaceH4/zephyr-7b-beta
154
  response = ""
155
  for message in client.chat_completion(
156
  messages,
@@ -163,31 +137,24 @@ def respond(
163
  response += token
164
  yield response
165
 
166
- # Функция для сброса истории чата
167
  def reset_chat():
168
  return []
169
 
170
- # Функция для анализа текстового файла
171
  def analyze_txt(file):
172
  if file is None:
173
  return "**Ошибка:** Ты не загрузил текстовый файл, а значит я не буду анализировать пустой файл."
174
  text = process_txt(file)
175
  return f"Содержимое файла:\n{text}"
176
 
177
- # Функция для изменения размера изображения
178
  def resize_image(image, width: int, height: int):
179
  if image is None:
180
  return None
181
-
182
  img = Image.open(image.name)
183
  resized_img = img.resize((width, height))
184
-
185
- # Сохраняем изображение во временный файл
186
  with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as tmp_file:
187
  resized_img.save(tmp_file.name)
188
  return tmp_file.name
189
 
190
- # Функция для перевода текста
191
  def translate_text(text: str, target_language: str):
192
  translator = Translator()
193
  try:
@@ -196,8 +163,63 @@ def translate_text(text: str, target_language: str):
196
  except Exception as e:
197
  return f"Ошибка перевода: {str(e)}"
198
 
199
- # Создание интерфейса
200
- with gr.Blocks() as demo:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
  # Заголовок с изображением
202
  gr.HTML("""
203
  <div style="text-align: center;">
@@ -208,20 +230,20 @@ with gr.Blocks() as demo:
208
  # Felguk News
209
  gr.Markdown("""
210
  ## Felguk News
211
- **Последнее обновление:** 2023-10-25
212
  - Добавлена поддержка новых форматов файлов.
213
  - Улучшена производительность обработки изображений.
214
  - Исправлены ошибки в переводе текста.
215
  """)
216
 
217
  gr.Markdown("Чат-бот Felguk v0. Отвечает на том же языке, на котором вы написали. Задавайте вопросы и загружайте файлы (PDF, изображения, видео, аудио, txt)!")
218
-
219
  # Кнопка "Новый чат"
220
  with gr.Row():
221
  new_chat_button = gr.Button("Новый чат", variant="secondary")
222
 
223
  # Felguk Tools: Отдельные инструменты
224
- with gr.Tab("Felguk Tools"):
225
  # Вкладка Txt Analyzer
226
  with gr.Tab("Анализатор текста"):
227
  gr.Markdown("## Анализатор текста")
@@ -296,7 +318,7 @@ with gr.Blocks() as demo:
296
  step=0.05,
297
  label="Top-p (nucleus sampling)",
298
  ),
299
- gr.File(label="Загрузите файл (опционально)"), # Поле для загрузки файлов
300
  ],
301
  )
302
 
 
27
  model = fasterrcnn_resnet50_fpn(weights="DEFAULT")
28
  model.eval()
29
 
30
+ # Функции для обработки данных (остаются без изменений)
31
  def process_pdf(file):
32
  pdf_reader = PyPDF2.PdfReader(file)
33
  text = ""
 
35
  text += page.extract_text()
36
  return text
37
 
 
38
  def process_image(file):
39
  image = Image.open(file)
40
  return f"Изображение: {image.size[0]}x{image.size[1]} пикселей, формат: {image.format}"
41
 
 
42
  def process_video(file):
43
  cap = cv2.VideoCapture(file.name)
44
  frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
 
46
  cap.release()
47
  return f"Видео: длительность {duration:.2f} секунд, {frame_count} кадров"
48
 
 
49
  def process_audio(file):
50
  audio = AudioSegment.from_file(file)
51
  return f"Аудио: длительность {len(audio) / 1000:.2f} секунд, частота {audio.frame_rate} Гц"
52
 
 
53
  def process_txt(file):
54
  with open(file.name, "r", encoding="utf-8") as f:
55
  text = f.read()
56
  return text
57
 
 
58
  def remove_background(image):
59
  if image is None:
60
  return "**Ошибка:** Чем я буду удалять, если ты не загрузил изображение?"
61
  output = remove(image)
62
  return output
63
 
 
64
  def count_objects(image):
65
  if image is None:
66
  return "Изображение не загружено."
 
 
67
  img = Image.open(image.name).convert("RGB")
68
  img_tensor = F.to_tensor(img).unsqueeze(0)
 
 
69
  with torch.no_grad():
70
  predictions = model(img_tensor)
 
 
71
  num_objects = len(predictions[0]['labels'])
72
  return f"Количество объектов на изображении: {num_objects}"
73
 
 
74
  def convert_image(image, target_format):
75
  if image is None:
76
  return None
77
  img = Image.open(image.name)
 
 
78
  with tempfile.NamedTemporaryFile(delete=False, suffix=f".{target_format.lower()}") as tmp_file:
79
  img.save(tmp_file, format=target_format)
80
  return tmp_file.name
81
 
 
82
  def detect_language(text):
83
  try:
84
  return detect(text)
85
  except:
86
+ return "en"
87
 
 
88
  def respond(
89
  message,
90
  history: list[tuple[str, str]],
 
94
  top_p,
95
  file=None,
96
  ):
 
97
  if file is not None:
98
  file_type = file.name.split(".")[-1].lower()
99
  if file_type == "pdf":
 
110
  file_info = "Неизвестный тип файла"
111
  message += f"\n[Пользователь загрузил файл: {file.name}]\n{file_info}"
112
 
 
113
  language = detect_language(message)
 
 
114
  if language == "ru":
115
  system_message = "Вы дружелюбный чат-бот, который понимает русский язык."
116
  else:
117
  system_message = "You are a friendly chatbot."
118
 
 
119
  messages = [{"role": "system", "content": system_message}]
 
 
120
  for val in history:
121
  if val[0]:
122
  messages.append({"role": "user", "content": val[0]})
123
  if val[1]:
124
  messages.append({"role": "assistant", "content": val[1]})
125
 
 
126
  messages.append({"role": "user", "content": message})
127
 
 
128
  response = ""
129
  for message in client.chat_completion(
130
  messages,
 
137
  response += token
138
  yield response
139
 
 
140
  def reset_chat():
141
  return []
142
 
 
143
  def analyze_txt(file):
144
  if file is None:
145
  return "**Ошибка:** Ты не загрузил текстовый файл, а значит я не буду анализировать пустой файл."
146
  text = process_txt(file)
147
  return f"Содержимое файла:\n{text}"
148
 
 
149
  def resize_image(image, width: int, height: int):
150
  if image is None:
151
  return None
 
152
  img = Image.open(image.name)
153
  resized_img = img.resize((width, height))
 
 
154
  with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as tmp_file:
155
  resized_img.save(tmp_file.name)
156
  return tmp_file.name
157
 
 
158
  def translate_text(text: str, target_language: str):
159
  translator = Translator()
160
  try:
 
163
  except Exception as e:
164
  return f"Ошибка перевода: {str(e)}"
165
 
166
+ # Кастомные CSS-стили
167
+ custom_css = """
168
+ /* Основной фон */
169
+ body, .gradio-container {
170
+ background-color: #f5f5f5;
171
+ font-family: 'Arial', sans-serif;
172
+ }
173
+
174
+ /* Заголовок */
175
+ h1, h2, h3 {
176
+ color: #333;
177
+ font-weight: bold;
178
+ }
179
+
180
+ /* Кнопки */
181
+ button {
182
+ background-color: #4CAF50;
183
+ color: white;
184
+ border: none;
185
+ padding: 10px 20px;
186
+ border-radius: 5px;
187
+ cursor: pointer;
188
+ }
189
+
190
+ button:hover {
191
+ background-color: #45a049;
192
+ }
193
+
194
+ /* Вкладки */
195
+ .tab-button {
196
+ background-color: #e0e0e0;
197
+ color: #333;
198
+ border-radius: 5px 5px 0 0;
199
+ }
200
+
201
+ .tab-button.selected {
202
+ background-color: #4CAF50;
203
+ color: white;
204
+ }
205
+
206
+ /* Текстовые поля */
207
+ input, textarea {
208
+ border: 1px solid #ccc;
209
+ border-radius: 5px;
210
+ padding: 10px;
211
+ width: 100%;
212
+ }
213
+
214
+ /* Изображения */
215
+ img {
216
+ border-radius: 10px;
217
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
218
+ }
219
+ """
220
+
221
+ # Создание интерфейса с кастомными стилями
222
+ with gr.Blocks(css=custom_css) as demo:
223
  # Заголовок с изображением
224
  gr.HTML("""
225
  <div style="text-align: center;">
 
230
  # Felguk News
231
  gr.Markdown("""
232
  ## Felguk News
233
+ **Последнее обновление:** 2024-01-03
234
  - Добавлена поддержка новых форматов файлов.
235
  - Улучшена производительность обработки изображений.
236
  - Исправлены ошибки в переводе текста.
237
  """)
238
 
239
  gr.Markdown("Чат-бот Felguk v0. Отвечает на том же языке, на котором вы написали. Задавайте вопросы и загружайте файлы (PDF, изображения, видео, аудио, txt)!")
240
+
241
  # Кнопка "Новый чат"
242
  with gr.Row():
243
  new_chat_button = gr.Button("Новый чат", variant="secondary")
244
 
245
  # Felguk Tools: Отдельные инструменты
246
+ with gr.Tabs():
247
  # Вкладка Txt Analyzer
248
  with gr.Tab("Анализатор текста"):
249
  gr.Markdown("## Анализатор текста")
 
318
  step=0.05,
319
  label="Top-p (nucleus sampling)",
320
  ),
321
+ gr.File(label="Загрузите файл (опционально)"),
322
  ],
323
  )
324