суботу, 13 квітня 2024 р.

Доступ до камери

Доступ до відеокамер у Python можна ефективно реалізувати за допомогою бібліотеки OpenCV, яка надає інструменти для захоплення відеопотоків з локальних та зовнішніх джерел. Користуючись класом `VideoCapture`, можна легко інтегрувати функціональність відеозахоплення в програми, що працюють як з веб-камерами, так і з файлами відео. Це дозволить взаємодіяти з відеопотоками в реальному часі, що відкриває можливості для створення програм відеонагляду, відеочатів, аналітики зображень та інших програм, які вимагають відеоаналітики.
 import cv2
import sys

# Ініціалізація змінної для визначення джерела відео
s = 0
# Перевірка чи передані аргументи командного рядка
if len(sys.argv) > 1:
    s = sys.argv[1]  # Використання першого аргументу як шляху до файлу або ідентифікатора камери

# Створення об'єкта VideoCapture для захоплення відео з камери або відтворення файлу
source = cv2.VideoCapture(s)

# Назва вікна, яке буде відображати відео
win_name = 'Camera Preview'
# Створення вікна для відображення відео з можливістю зміни розміру
cv2.namedWindow(win_name, cv2.WINDOW_NORMAL)

# Головний цикл для читання кадрів і відображення їх у вікні
while cv2.waitKey(1) != 27: # Чекати 1 мс і перервати цикл, якщо натиснуто Escape (27)
    has_frame, frame = source.read()  # Зчитування кадру
    if not has_frame:  # Якщо кадри закінчились, перервати цикл
        break
    cv2.imshow(win_name, frame)  # Відображення кадру у вікні

# Звільнення ресурсів та закриття вікон
source.release()
cv2.destroyWindow(win_name)
  

вівторок, 19 вересня 2023 р.

Вилучення метаданих із pdf файлу

Вилучення метаданих із PDF файлу

Метадані в PDF файлах можуть містити інформацію про автора, дату створення, програмне забезпечення, яке було використано для створення файлу, та інші деталі. Інколи може виникнути необхідність видалити або змінити ці метадані.

У цьому дописі ми розглянемо, як використовувати бібліотеку PyPDF2 для вилучення метаданих із PDF файлу.

Встановлення бібліотеки

Для початку потрібно встановити бібліотеку PyPDF2:

pip install PyPDF2
    

Вилучення метаданих

Ось приклад коду для вилучення метаданих із PDF файлу:

import PyPDF2

def remove_metadata(pdf_path, output_path):
    with open(pdf_path, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        
        # Створення нового PDF-файлу
        writer = PyPDF2.PdfWriter()
        
        # Копіювання всіх сторінок 
        for page_num in range(len(reader.pages)):
            page = reader.pages[page_num]
            writer.add_page(page)

        # Вилучення метаданих
        writer.add_metadata({
            '/Producer': '',
            '/Creator': '',
            '/CreationDate': '',
            '/ModDate': '',
            '/Author': ''
        })

        with open(output_path, 'wb') as output_file:
            writer.write(output_file)
             
    

Після запуску цього коду метадані у вихідному PDF-файлі будуть видалені.

Приклад використання

Для вилучення метаданих із вашого PDF файлу, ви можете використати нашу функцію таким чином:

# Приклад використання
remove_metadata('your_input_file.pdf', 'output_without_metadata.pdf')

Де 'your_input_file.pdf' - це шлях до вашого вхідного файлу, а 'output_without_metadata.pdf' - шлях, за яким буде збережено новий PDF файл без метаданих.

Зміна метаданих PDF файлу

Якщо ви бажаєте змінити деякі метадані, а не видаляти їх повністю, ви можете використати наступну функцію:

def modify_metadata(input_file, output_file, new_metadata):
    # Відкриваємо вхідний файл
    with open(input_file, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        
        # Створюємо новий PDF файл
        writer = PyPDF2.PdfWriter()
        
        # Додаємо сторінки з вхідного файлу
        for page in reader.pages:
            writer.add_page(page)
            
        # Змінюємо метадані
        writer.add_metadata(new_metadata)
        
        # Зберігаємо новий PDF файл
        with open(output_file, 'wb') as output:
            writer.write(output)

Приклад використання

Для зміни метаданих вашого PDF файлу:


new_data = {
    '/Title': 'Новий заголовок',
    '/Author': 'Новий автор',
    '/Subject': 'Нова тема',
    # ... (інші метадані для зміни) ...
}

# Приклад використання
modify_metadata('your_input_file.pdf', 'output_with_modified_metadata.pdf', new_data)

Де 'your_input_file.pdf' - це шлях до вашого вхідного файлу, 'output_with_modified_metadata.pdf' - шлях, за яким буде збережено новий PDF файл із зміненими метаданими, а new_data - словник з новими метаданими.

вівторок, 8 серпня 2023 р.

Конвертація TeX-Файлу з Формулами в DOCX за допомогою Pandoc

Конвертація TeX-Файлу з Формулами в DOCX за допомогою Pandoc

TeX є потужним інструментом для створення складних документів, особливо коли йдеться про математичні формули. Але інколи може виникнути потреба конвертувати TeX-файл в формат DOCX. В цьому пості ми розглянемо, як це зробити за допомогою Pandoc.

Встановлення Pandoc

Спершу вам потрібно встановити Pandoc. Це можна зробити за допомогою наступної команди:

pip install pandoc

Конвертація TeX-Файлу в DOCX

За допомогою Pandoc ви можете конвертувати TeX-файл в DOCX за допомогою такої команди:

pandoc myfile.tex -o myfile.docx

де myfile.tex - це ім'я вашого TeX-файлу, а myfile.docx - ім'я вихідного DOCX-файлу.

Збереження Формул

Pandoc автоматично зберігає більшість формул при конвертації з TeX в DOCX. Проте, деякі специфічні формули можуть потребувати додаткового налаштування або редагування вручну.

Заключення

Конвертація TeX-файлу в DOCX може бути здійснена за допомогою Pandoc з лише кількома командами. Це забезпечує гнучкий спосіб перетворення ваших наукових і математичних документів в загальноприйнятий формат, який можна легко відкрити та редагувати в багатьох текстових редакторах.

Автоматизація Конвертації за допомогою Bat-Файлу

Якщо вам потрібно конвертувати багато TeX-файлів, ви можете автоматизувати цей процес за допомогою bat-файлу. Ось як це зробити:

  1. Створіть новий текстовий файл з розширенням .bat, наприклад, convert.bat.
  2. Відкрийте файл в текстовому редакторі та додайте наступний рядок:
  3. pandoc %1.tex -o %1.docx
  4. Збережіть і закрийте файл.
  5. Тепер ви можете перетягнути ваш TeX-файл на цей bat-файл або запустити його з командного рядка, передавши ім'я TeX-файлу без розширення як аргумент, наприклад:
  6. convert myfile

Цей bat-файл використовує Pandoc для конвертації вказаного TeX-файлу в DOCX. Ви можете легко конвертувати кілька файлів, перетягуючи їх на bat-файл або запускаючи його з командного рядка для кожного файлу окремо.

Об'єднання кількох docx файлів в один файл

Вступ

Об'єднання кількох DOCX-файлів в один файл може бути корисним у різних ситуаціях, особливо при створенні звітів, конспектів та інших документів. У цьому пості я поясню, як можна об'єднати кілька DOCX-файлів в один за допомогою мови програмування Python та бібліотеки python-docx.

Підготовка

Перш ніж почати, вам потрібно встановити бібліотеку python-docx. Ви можете зробити це за допомогою наступної команди:

pip install python-docx

Об'єднання DOCX-файлів

Тепер ми можемо написати код для об'єднання DOCX-файлів. Ось основні кроки:

  1. Імпортування необхідних бібліотек:
  2. from docx import Document
  3. Створення нового об'єкта документа:
  4. merged_document = Document()
  5. Об'єднання кожного файлу: Ітеруйте через кожен файл, який потрібно об'єднати, та додайте його вміст до об'єднаного документа.
  6. files = ['file1.docx', 'file2.docx', 'file3.docx']
    for file_name in files:
        sub_doc = Document(file_name)
        for element in sub_doc.element.body:
            merged_document.element.body.append(element)
  7. Збереження об'єднаного документа:
  8. merged_document.save('merged.docx')

За допомогою цього підходу можна легко об'єднати кілька DOCX-файлів в один. Це може бути корисно для автоматизації робочих процесів та збільшення продуктивності.

Об'єднання DOCX-файлів з Малюнками

Об'єднання DOCX-файлів з малюнками вимагає додаткового кроку, оскільки малюнки мають бути коректно впорядковані у новому документі. Ми можемо використовувати бібліотеку docxcompose для цього завдання.

Встановлення docxcompose

Спершу вам потрібно встановити бібліотеку docxcompose:

pip install docxcompose

Код для об'єднання DOCX-файлів з малюнками

Тепер ми можемо використовувати docxcompose для об'єднання файлів з малюнками. Ось приклад коду:

from docxcompose.composer import Composer
from docx import Document

merged_document = Document()
composer = Composer(merged_document)

files = ['file1.docx', 'file2.docx', 'file3.docx']
for file_name in files:
    sub_doc = Document(file_name)
    composer.append(sub_doc)

composer.save('merged_with_images.docx')

Цей код зчитує кожен файл зі списку файлів та об'єднує їх в один документ, зберігаючи всі малюнки.

Об'єднання DOCX-файлів з малюнками може бути трохи складнішим, але з правильними інструментами це все одно досить просто. За допомогою бібліотеки docxcompose ми можемо зберегти всі малюнки та інші елементи форматування при об'єднанні файлів.

СhatCPT4.5

середу, 2 серпня 2023 р.

Візуалізація фільтрів згорткових шарів

Згорткові нейронні мережі (CNN) використовуються для багатьох завдань машинного навчання, особливо для обробки зображень. Одним з ключових елементів CNN є згорткові шари, які використовують набори ваг (або фільтрів) для сканування вхідного зображення та виявлення різних характеристик, таких як краї, текстури та кольори.

Ми можемо візуалізувати ці фільтри, щоб отримати краще уявлення про те, як CNN "бачить" зображення. В цьому пості ми покажемо, як це зробити за допомогою TensorFlow і Keras.

Спочатку, давайте навчимо модель класифікації на наборі MNIST:

import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

mnist = tf.keras.datasets.mnist.load_data()
(X_train_full, y_train_full), (X_test, y_test) = mnist
X_train_full = X_train_full / 255.
X_test = X_test / 255.
X_train, X_valid = X_train_full[:-5000], X_train_full[-5000:]
y_train, y_valid = y_train_full[:-5000], y_train_full[-5000:]

X_train = X_train[..., np.newaxis]
X_valid = X_valid[..., np.newaxis]
X_test = X_test[..., np.newaxis]

model= tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, kernel_size=13, padding="same",
                           activation="relu", kernel_initializer="he_normal"),
    tf.keras.layers.Conv2D(64, kernel_size=9, padding="same",
                           activation="relu", kernel_initializer="he_normal"),
    tf.keras.layers.MaxPool2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dropout(0.25),
    tf.keras.layers.Dense(128, activation="relu",
                          kernel_initializer="he_normal"),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Dense(10, activation="softmax")
])

model.compile(loss="sparse_categorical_crossentropy", optimizer="nadam",
              metrics=["accuracy"])

model.fit(X_train, y_train, epochs=4, validation_data=(X_valid, y_valid))
model.evaluate(X_test, y_test)

Після тренування моделі ми можемо отримати ваги першого згорткового шару:

filters, biases = model.layers[0].get_weights()

Це дає нам масив фільтрів, які можна візуалізувати за допомогою Matplotlib:

fig, ax = plt.subplots(nrows=4, ncols=8, figsize=(12, 6))
for i in range(4):
    for j in range(8):
        ax[i][j].imshow(filters[:, :, 0, i*8+j], cmap='cividis')
        ax[i][j].axis('off')
plt.show()

На виході отримаємо 32 візуалізованих фільтри, які показують, як кожен фільтр реагує на вхідні дані. Це може бути корисним інструментом для розуміння того, як CNN працює.

Для виводу фільтрів другого шару використаємо такий код:

filters, biases = model.layers[1].get_weights()
fig, ax = plt.subplots(nrows=8, ncols=8, figsize=(12, 12))
for i in range(8):
    for j in range(8):
        ax[i][j].imshow(filters[:, :, 0, i*8+j], cmap='cividis')
        ax[i][j].axis('off')
plt.show()
Розміри ядер було вибрано великими для кращої візуалізації.