Сценарий Python, который преобразует изображение с веб-камеры в ASCII в cmd, который не печатает Unicode - PullRequest
0 голосов
/ 20 марта 2019

Я нашел этот скрипт на python, который преобразует ввод веб-камеры в ASCII в командную строку, и сделал несколько изменений в соответствии с моими потребностями. Я хотел бы добавить символ Unicode к выводу, но в настоящее время он выводит только поле вместо правильного Unicode всякий раз, когда я фактически запускаю его. Что мне нужно изменить, чтобы убедиться, что он печатает фактический символ Unicode?

import cv2
from time import sleep, time
import sys

import curses
from curses import wrapper

import locale
locale.setlocale(locale.LC_ALL, '')
#stdscr.addstr(0, 0, mystring.encode('UTF-8'))

x = 160
sx = 4

chars = ['\u23FA', ".", ".", "  ", "  ", "  ", "  ", "  ", "  ", "  "]

size = x*sx, int(x*sx*.75)
operating = False
ongoing = True
#font.set_bold(True)
fpsa = 0

br = (255, 255, 255)
fr = (0, 0, 0)

lenc = len(chars)

visload = False
mt = False
aa = False

def toAscii(pic, scr):
    global operating
    m = 0
    for y in pic:
        tm = max(y)
        if tm > m:
            m = tm

    fx = 0
    fy = 0

    h,w = scr.getmaxyx()

    #for y in pic:
        #for x in y:
    for _y in range(h-1):
        for _x in range(w-1):
            y = pic[int(_y/float(h) * len(pic))]
            x = y[int(_x/float(w) * len(y))]
            scr.addstr(_y, _x, chars[int(x/m*(lenc-1))].encode('UTF-8'), curses.color_pair(1))
            fx += 1
        fy += 1
        fx = 0
    operating = False


cap = cv2.VideoCapture(0)

def main(scr):

    global operating

    while True:
        ret, frame = cap.read()

        curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLACK)

        colored = cv2.resize(cv2.resize(cv2.cvtColor(frame, 0), (x, int(x*0.75))), (640, 480))
        colored = cv2.cvtColor(frame, 0)


        gray = cv2.resize(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), (x, int(x*.75)))

        if not operating:
            operating = True
            if mt:
                _thread.start_new_thread(toAscii, (gray, scr))
            else:
                toAscii(gray, scr)

        scr.refresh()


        #gray = cv2.resize(gray, (640, 480), interpolation = cv2.INTER_NEAREST)


        #cv2.imshow('frame',cv2.resize(gray, (640, 480)))

def _main(scr):
    try:
        main(scr)
    except KeyboardInterrupt:
        pass

wrapper(_main)

cap.release()
cv2.destroyAllWindows()

1 Ответ

0 голосов
/ 20 марта 2019

Это зависит от используемого вами эмулятора терминала.Причина, по которой символ эмодзи отображается в виде окна в вашем терминале, заключается в том, что ваш эмулятор терминала не поддерживает символ Unicode.

Я только что протестировал ваш код на iTerm2, который поддерживает Unicode, и он работает без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...