Ответы пользователя по тегу Python
  • Распознование изображений только с помощью NumPy?

    @WhiteApfel
    Сам numpy не умеет обрабатывать изображения, строить связи между "нейронами" и вообще он больше для управления данными в массивах.

    Но чисто теоретически возможно ли? Возможно. Как? Ну...

    Для начала тебе нужно как-то получить массив пикселей. Тут зависит от контекста. Если картинку из файла брать, то есть старая добрая библиотека PIL для чтения изображений. Нет, конечно, можно и декодер написать, но не уверен, что оно тебе надо настолько "своё".
    from PIL import Image
    import numpy
    
    img = Image.open('image.png')
    pixel_map = np.array(img)


    Это будет массив элементов строк, где каждый элемент строки представлен массивом [r, g, b] или [r, g, b, a] при наличии прозрачности.

    # Например, изображение с такими пикселями
    
    # [красный][зелёный]
    #  [синий]  [белый]
    
    # будет представлено массивом
    [[[255, 0, 0], [0, 255, 0]], [[0, 0, 255], [255, 255, 255]]]


    Стоит признать, что такой формат слабо подходит для обучения. Обычно изображения приводят к Ч/Б, сжимают по размерам и вот это вот всё. Сжатие, как и чтение, лучше делать через библиотеку PIL, она быстрее работает, чем чистый python (вроде, оно на С написано, но это не точно).

    Для обучения обычно распаковывают двумерный массив пикселей (пиксель у нас был тоже массивом, но считаем это за единый объект, потому что могли его во что-то другое превратить) в одномерный. Например, пиксели последовательно положить из строк:

    pixel_sequence = [pixel for row in pixel_map for pixel in row]


    Важно. Если брать куски кода, у нас получится list[list[r, g, b (, a)]]. Это не то что бы подходит для сетей прямого распространения (могу напутать с терминологией, поправьте), можно ещё раз распаковать вложенный массив, конечно, но сложность из-за увеличения количества входных данных вырастет многократно


    А дальше уже можно на чистом python'е писать логику для обработки значений из массива numpy. Есть хорошая статья на proglib. Как результат, будет нейросеть "на numpy", хотя хватило бы и обычных питоновских листов
    Ответ написан
    Комментировать
  • Как десериализовать данные с Google Protobuf в Python 3?

    @WhiteApfel
    Правильно понимаю, что надо расшифровать бинарное сообщение protobuf без использования .proto схемы? Если да, то есть хороший инструмент https://github.com/nevermoe/protobuf_decoder

    Использование официальной библиотеки подразумевает генерацию py-файлов с необходимыми классами на основе которых и будет происходить десериализация. Пример с их страницы:
    protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/addressbook.proto

    Можно заменить переменные окружения на относительные пути удобства ради. И нужно будет поменять на свой proto-файл последний аргумент. Потом импортировать в код и использовать, у них есть и пример https://developers.google.com/protocol-buffers/doc...
    Ответ написан
    Комментировать
  • Почему нету импорта?

    @WhiteApfel
    Привет

    Да, проблема с импортом была. Исправил её в начале июня. Асинхронная версия до сих пор нестабильна, но если очень хочется, можно установить с помощью команды pip install pyQiwiP2P==2.0a10
    Ответ написан
    7 комментариев
  • Как с помошъю xsd сделать xml и заполнить данными?

    @WhiteApfel
    Да простят меня за ответ со SO (ссылка), но кому-то явно пригодится туточки.

    import xmlschema
    import json
    from xml.etree.ElementTree import ElementTree
    
    my_xsd = '<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="note" type="xs:string"/> </xs:schema>'
    
    schema = xmlschema.XMLSchema(my_xsd)
    data = json.dumps({'note': 'this is a Note text'})
    
    xml = xmlschema.from_json(data, schema=schema, preserve_root=True)
    
    ElementTree(xml).write('my_xml.xml')
    Ответ написан
    Комментировать