Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/47: Рейтинг темы: голосов - 47, средняя оценка - 4.68
29 / 25 / 9
Регистрация: 26.05.2017
Сообщений: 261

Opencv - распознавание лиц

16.08.2018, 17:16. Показов 9231. Ответов 42
Метки нет (Все метки)

Я взял код отсюда https://robotos.in/uroki/obnar... -na-python
Python
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
import cv2
import numpy as np
import os 
 
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer/trainer.yml')
cascadePath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath);
 
font = cv2.FONT_HERSHEY_SIMPLEX
 
#iniciate id counter
id = 0
 
# names related to ids: example ==> Marcelo: id=1,  etc
names = ['None', 'Marcelo', 'Paula', 'Ilza', 'Z', 'W'] 
 
# Initialize and start realtime video capture
cam = cv2.VideoCapture(0)
cam.set(3, 640) # set video widht
cam.set(4, 480) # set video height
 
# Define min window size to be recognized as a face
minW = 0.1*cam.get(3)
minH = 0.1*cam.get(4)
 
while True:
    ret, img =cam.read()
    img = cv2.flip(img, -1) # Flip vertically
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
    faces = faceCascade.detectMultiScale( 
        gray,
        scaleFactor = 1.2,
        minNeighbors = 5,
        minSize = (int(minW), int(minH)),
       )
 
    for(x,y,w,h) in faces:
        cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
        id, confidence = recognizer.predict(gray[y:y+h,x:x+w])
 
        # Check if confidence is less them 100 ==> "0" is perfect match 
        if (confidence < 100):
            id = names[id]
            confidence = "  {0}%".format(round(100 - confidence))
        else:
            id = "unknown"
            confidence = "  {0}%".format(round(100 - confidence))
        
        cv2.putText(img, str(id), (x+5,y-5), font, 1, (255,255,255), 2)
        cv2.putText(img, str(confidence), (x+5,y+h-5), font, 1, (255,255,0), 1)  
    
    cv2.imshow('camera',img) 
 
    k = cv2.waitKey(10) & 0xff # Press 'ESC' for exiting video
    if k == 27:
        break
 
# Do a bit of cleanup
print("\n [INFO] Exiting Program and cleanup stuff")
cam.release()
cv2.destroyAllWindows()
И изменил cam.set:
Python
1
2
cam.set(3, 160)
cam.set(4, 128)
Но теперь почти всегда лица, которые уже есть в базе распознаются как unkdown. Как так?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2018, 17:16
Ответы с готовыми решениями:

OpenCV Распознавание черт лица
Привет, асы) Пишу программу, которая должна распознавать лица с картинки. Использую библиотеку компьютерного зрения OpenCV и язык...

OpenCV - распознавание фигур по контуру
Имеется два изображения на одном различные фигуры. разного цвета и размера. на другом фигура которую необходимо найти но она повернута и...

Распознавание прямоугольных обьектов с использованием opencv
Использую видеопоток в режиме реального времени с web-камеры с использованием cap = cv2.VideoCapture(0). В этом видеопотоке мне нужно в...

42
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
25.08.2018, 17:48
Цитата Сообщение от feodor Посмотреть сообщение
mjpg-streamer для люнукса
Есть версия под windows https://github.com/flyinggoril... EGStreamer и тут https://www.microsoft.com/en-u... verviewtab
1
29 / 25 / 9
Регистрация: 26.05.2017
Сообщений: 261
25.08.2018, 21:51  [ТС]
Так не выключайте камеру, вынесите включение камеры в начало скрипта
Так я и перенес, но все равно как-то медленно, я думаю это из-за закрития и открытия сокетов.

Добавлено через 3 часа 54 минуты
Может даже выйдет поймать стрим так: cv2.VideoCapture(http:/host:5000)
0
29 / 25 / 9
Регистрация: 26.05.2017
Сообщений: 261
26.08.2018, 23:35  [ТС]
У меня вышло поймать видео с mjpg-streamer с помощью
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import cv2
import urllib.request
import numpy as np
 
stream = urllib.request.urlopen('http://ip:8080/?action=stream')
bytes = bytes()
while True:
    bytes += stream.read(1024)
    a = bytes.find(b'\xff\xd8')
    b = bytes.find(b'\xff\xd9')
    if a != -1 and b != -1:
        jpg = bytes[a:b+2]
        bytes = bytes[b+2:]
        i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
        cv2.imshow('i', i)
        if cv2.waitKey(1) == 27:
            exit(0)
Осталось отправить обратно... Задержка, кстати, небольшая.

Добавлено через 32 минуты
А как отправить обратно результат? Создать вирткальную камеру? Как? Есть другие варианты?
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
27.08.2018, 09:18
А что должно быть на выходе? Если 1 кадр, то можно сокетом, так как прием через urllib, то его можно не закрывать

Добавлено через 1 минуту
или запустить тот же mjpg-streamer и отправить
1
29 / 25 / 9
Регистрация: 26.05.2017
Сообщений: 261
27.08.2018, 10:15  [ТС]
По-сути, обратно можно отправлять не видео поток, а только координаты лица/4, имя, коэффициент уверенности (см. шапку темы). Или с помощью mjpg-streamer отправить видео-результат/4. Почему /4? Потому что экран будет очень маленький. Второй вариант отправки мне нравится, пока что, больше. Я сейчас установлю streamer на мой windows, а что дальше? Всмысле, он же расчитан на отправку изображения с камеры, ну, может быть он может и видео отправить, а как отослать наш результат?
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
27.08.2018, 10:37
Вот тут оазбирают вопрос о виртуальной вебке https://stackoverflow.com/ques... cam-device
0
29 / 25 / 9
Регистрация: 26.05.2017
Сообщений: 261
27.08.2018, 21:47  [ТС]
Ну вот, например, https://github.com/webcamoid/webcamoid. На скриншоте media file: /dev/video1. Т.е будь мы на линуксе, мы бы, вероятно, смогли перенаправлять наш результат в /dev/, а потом сделать из этого веб камеру(ну или сказать mjpg-streamer-у отправлять не камеру а dev/resultat), но не на windows...

Добавлено через 10 часов 17 минут
mjpg-streamer чето не компилируется...
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
27.08.2018, 22:42
Цитата Сообщение от feodor Посмотреть сообщение
mjpg-streamer чето не компилируется...
То есть, ошибки же какие-то есть
0
29 / 25 / 9
Регистрация: 26.05.2017
Сообщений: 261
28.08.2018, 08:40  [ТС]
Ошибка Сбой задачи "ValidateAppxPackage". Файл 'C:\Users\username\Downloads\MJPEG-Streamer-Universal-Windows-App-master\MJPEG-Streamer-Universal-Windows-App-master\MJPEGStreamer\Package.StoreAssoci ation.xml' не найден.
Возможно, я неправильно понял пункт 3 из readme mjpg-streamer
Open the .sln and build your target to test it
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
28.08.2018, 08:44
А зачем собирать, он же в магазине windows есть
0
29 / 25 / 9
Регистрация: 26.05.2017
Сообщений: 261
28.08.2018, 23:02  [ТС]
Ну, если я тыкаю на get, меня перенаправляют в магазин... Которого у меня не было. А когда я его установил, ему не понравилась версия (у меня windows 10 1607, а надо 1-какие-то-цифры ).

Добавлено через 10 часов 50 минут
Идея: передавать результат в виде ini конфигураций через сокет
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import socket
import configparser
 
sock = socket.socket()
sock.bind(('', 9090))
sock.listen(1)
conn, addr = sock.accept()
conn.setblocking(0)
 
print('connected:', addr)
 
data = b""
 
while 1:
    tmp = conn.recv(1024)
    if not tmp:
        break
    data += tmp
 
config = configparser.ConfigParser(( data.decode("utf-8") ))#не уверен, что так можно
#дальше через циклы достаем все имена,координаты и т.п.(их может быть несколько)
 
 
conn.close()
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import socket
import configparser
 
sock = socket.socket()
sock.connect(('localhost', 9090))
 
config = configparser.ConfigParser()
config.add_section("Users")
config.add_section("Confidence")
config.add_section("x")
config.add_section("y")
config.add_section("w")
config.add_section("h")
config.set("Users", "id", "name")#надо через цикл это делать, т.к. имен неопределенное количество 
config.set("Confidence", "id", "confidence")
config.set("Confidence", "id", "x")
config.set("Confidence", "id", "y")
config.set("Confidence", "id", "w")
config.set("Confidence", "id", "h")
config = config.print().encode("utf-8")#вот это надо переделать
sock.sendall(config)
 
sock.close()
Пока вроде проблемы только с config = config.print().encode("utf-8"), остальное, возможно, смогу сделать и сам.
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
29.08.2018, 10:31
Вот так можно

Python
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
import socket
import configparser
import io
 
sock = socket.socket()
sock.bind(('', 9090))
sock.listen(1)
conn, addr = sock.accept()
#conn.setblocking(0)
 
print('connected:', addr)
 
data = b""
 
while 1:
    tmp = conn.recv(1024)
    if not tmp:
        break
    data += tmp
 
 
f = io.StringIO(data.decode('utf-8'))
config = configparser.RawConfigParser()
config.readfp(f)
print(config.sections())
 
conn.close()
Python
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
import socket
import configparser
import io
 
sock = socket.socket()
sock.connect(('localhost', 9090))
 
config = configparser.ConfigParser()
config.add_section("Users")
config.add_section("Confidence")
config.add_section("x")
config.add_section("y")
config.add_section("w")
config.add_section("h")
config.set("Users", "id", "name")#надо через цикл это делать, т.к. имен неопределенное количество 
config.set("Confidence", "id", "confidence")
config.set("Confidence", "id", "x")
config.set("Confidence", "id", "y")
config.set("Confidence", "id", "w")
config.set("Confidence", "id", "h")
f = io.StringIO()
config.write(f)
sock.sendall(f.getvalue().encode('utf-8'))
 
sock.close()
1
29 / 25 / 9
Регистрация: 26.05.2017
Сообщений: 261
29.08.2018, 22:35  [ТС]
Python
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
import socket
import configparser
import io
import numpy as np
 
sock = socket.socket()
sock.bind(('', 9090))
sock.listen(1)
conn, addr = sock.accept()
conn.setblocking(0)
 
print('connected:', addr)
 
data = b""
Name = []
Confidence = []
x = []
y = []
w = []
h = []
 
while 1:
    try:
        tmp = conn.recv(1024)
    except:
        continue
    if not tmp:
        break
    data += tmp
 
f = io.StringIO(data.decode('utf-8'))
config = configparser.RawConfigParser()
config.readfp(f)
print(config.sections())
 
colvo = config.get("Colvo", "colvo")
for n in range(0, 1, int(colvo)):
    Name.append(config.get("Users", str(n)))
    Confidence.append(config.get("Confidence", str(n)))
    x.append(config.get("x", str(n)))
    y.append(config.get("y", str(n)))
    w.append(config.get("w", str(n)))
    h.append(config.get("h", str(n)))
 
print(Name[0],'\n')
print(Confidence[0],'\n')
print(x[0],'\n')
print(y[0],'\n')
print(w[0],'\n')
print(h[0],'\n')
 
 
conn.close()
Python
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
import socket
import configparser
import io
import numpy as np
 
sock = socket.socket()
sock.connect(('localhost', 9090))
 
config = configparser.ConfigParser()
config.add_section("Colvo")
config.add_section("Users")
config.add_section("Confidence")
config.add_section("x")
config.add_section("y")
config.add_section("w")
config.add_section("h")
config.set("Colvo", "colvo", "1")
config.set("Users", "0", "name")
config.set("Confidence", "0", "confidence")
config.set("x", "0", "x")
config.set("y", "0", "y")
config.set("w", "0", "w")
config.set("h", "0", "h")
f = io.StringIO()
config.write(f)
sock.sendall(f.getvalue().encode('utf-8'))
 
 
sock.close()
Все работает. Тольно надо придумать нормальное имя переменной, а не colvo.
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
29.08.2018, 23:06
Лучший ответ Сообщение было отмечено feodor как решение

Решение

Цитата Сообщение от feodor Посмотреть сообщение
Тольно надо придумать нормальное имя переменной, а не colvo.
quantity
0
29 / 25 / 9
Регистрация: 26.05.2017
Сообщений: 261
30.08.2018, 13:17  [ТС]
Python
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
import socket
import configparser
import io
import numpy as np
import cv2
 
sock = socket.socket()
sock.bind(('', 9090))
sock.listen(1)
conn, addr = sock.accept()
conn.setblocking(0)
 
print('connected:', addr)
 
while 1:
    data = b""
    Name = []
    Confidence = []
    x = []
    y = []
    w = []
    h = []
    img = np.zeros((160, 180, 3), np.uint8)
    color = tuple(reversed(000000))#rgb_color черный
    img[:] = color
 
    while 1:
        try:
            tmp = conn.recv(1024)
        except:
            continue
        if not tmp:
            break
        data += tmp
    
    f = io.StringIO(data.decode('utf-8'))
    config = configparser.RawConfigParser()
    config.readfp(f)
    print(config.sections())
    
    quantity = config.get("Quantity", "quantity")
    for n in range(0, 1, int(quantity)):
        Name.append(config.get("Users", str(n)))
        Confidence.append(config.get("Confidence", str(n)))
        x.append(round((str((config.get("x", str(n)))))/4)
        y.append(round(str((config.get("y", str(n)))))/4)
        w.append(round(str((config.get("w", str(n)))))/4)
        h.append(round(str((config.get("h", str(n)))))/4)
 
    # x = [int(item) for item in x]
    # y = [int(item) for item in y]
    # w = [int(item) for item in w]
    # h = [int(item) for item in h]
    for n in range(0, 1, int(quantity)):
        cv2.rectangle(img, (x[n],y[n]), (x[n]+w[n],y[n]+h[n]), (0,255,0), 2)
        cv2.putText(img, str(Name[n]), (x[n]+5,y[n]-5), font, 1, (255,255,255), 2)
        cv2.putText(img, str(Confidence[n]), (x[n]+5,y[n]+h[n]-5), font, 1, (255,255,0), 1)  
    
    cv2.imshow('img',img)
    k = cv2.waitKey(10) & 0xff # Press 'ESC' for exiting video
    if k == 27:
        break
 
 
conn.close()
Python
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
import socket
import configparser
import io
import numpy as np
 
sock = socket.socket()
sock.connect(('localhost', 9090))
 
config = configparser.ConfigParser()
config.add_section("Quantity")
config.add_section("Users")
config.add_section("Confidence")
config.add_section("x")
config.add_section("y")
config.add_section("w")
config.add_section("h")
config.set("Quantity", "quantity", "1")
config.set("Users", "0", "name")
config.set("Confidence", "0", "confidence")
config.set("x", "0", "x")
config.set("y", "0", "y")
config.set("w", "0", "w")
config.set("h", "0", "h")
f = io.StringIO()
config.write(f)
sock.sendall(f.getvalue().encode('utf-8'))
 
 
sock.close()
y.append(round(str((config.get("y", str(n)))))/4)
^
SyntaxError: invalid syntax
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
30.08.2018, 13:21
Цитата Сообщение от feodor Посмотреть сообщение
y.append(round(str((config.get("y", str(n)))))/4)
^
SyntaxError: invalid syntax
В строке над этой лишняя скобка
0
29 / 25 / 9
Регистрация: 26.05.2017
Сообщений: 261
30.08.2018, 13:39  [ТС]
Уже понял. Прикольно, что ошибку вызывает не строка с ошибкой, а та, что идет за ней.

Добавлено через 11 минут
Python
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
import socket
import configparser
import io
import numpy as np
import cv2
 
sock = socket.socket()
sock.bind(('', 9090))
sock.listen(1)
conn, addr = sock.accept()
conn.setblocking(0)
 
print('connected:', addr)
 
while 1:
    data = b""
    Name = []
    Confidence = []
    x = []
    y = []
    w = []
    h = []
    img = np.zeros((160, 180, 3), np.uint8)
    #color = tuple(reversed(000000))#rgb_color черный
    img[:] = '000000'
 
    while 1:
        try:
            tmp = conn.recv(1024)
        except:
            continue
        if not tmp:
            break
        data += tmp
    
    f = io.StringIO(data.decode('utf-8'))
    config = configparser.RawConfigParser()
    config.readfp(f)
    print(config.sections())
    
    quantity = config.get("Quantity", "quantity")
    for n in range(0, 1, int(quantity)):
        Name.append(config.get("Users", str(n)))
        Confidence.append(config.get("Confidence", str(n)))
        x.append(round(str((config.get("x", str(n)))))/4)
        y.append(round(str((config.get("y", str(n)))))/4)
        w.append(round(str((config.get("w", str(n)))))/4)
        h.append(round(str((config.get("h", str(n)))))/4)
 
    # x = [int(item) for item in x]
    # y = [int(item) for item in y]
    # w = [int(item) for item in w]
    # h = [int(item) for item in h]
    for n in range(0, 1, int(quantity)):
        cv2.rectangle(img, (x[n],y[n]), (x[n]+w[n],y[n]+h[n]), (0,255,0), 2)
        cv2.putText(img, str(Name[n]), (x[n]+5,y[n]-5), font, 1, (255,255,255), 2)
        cv2.putText(img, str(Confidence[n]), (x[n]+5,y[n]+h[n]-5), font, 1, (255,255,0), 1)  
    
    cv2.imshow('img',img)
    k = cv2.waitKey(10) & 0xff # Press 'ESC' for exiting video
    if k == 27:
        break
 
 
conn.close()
Python
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
import cv2
import urllib.request
import numpy as np
import os 
import socket
import configparser
import io
 
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer/trainer.yml')
cascadePath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath);
 
font = cv2.FONT_HERSHEY_SIMPLEX
 
#iniciate id counter
id = 0
 
# names related to ids: example ==> Marcelo: id=1,  etc
names = ['None', 'Marcelo', 'Paula', 'Ilza', 'Z', 'W'] 
 
minW = 0.1*480
minH = 0.1*480
 
sock = socket.socket()
sock.connect(('localhost', 9090))
stream = urllib.request.urlopen('http://192.168.1.64:8080/?action=stream')
bytes = bytes()
while True:
    bytes += stream.read(1024)
    a = bytes.find(b'\xff\xd8')
    b = bytes.find(b'\xff\xd9')
    if a != -1 and b != -1:
        jpg = bytes[a:b+2]
        bytes = bytes[b+2:]
        cam = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
        cv2.imshow('i', cam)
        if cv2.waitKey(1) == 27:
            exit(0)
        img =cam
        img = cv2.flip(img, -1) # Flip vertically
        
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        
        faces = faceCascade.detectMultiScale( 
            gray,
            scaleFactor = 1.2,
            minNeighbors = 5,
            minSize = (int(minW), int(minH)),
           )
        
        
        config = configparser.ConfigParser()
        config.add_section("Quantity")
        config.add_section("Users")
        config.add_section("Confidence")
        config.add_section("x")
        config.add_section("y")
        config.add_section("w")
        config.add_section("h")
        n = 0
        
        for(x,y,w,h) in faces:
            
            id, confidence = recognizer.predict(gray[y:y+h,x:x+w])
        
            # Check if confidence is less them 100 ==> "0" is perfect match 
            if (confidence < 100):
                id = names[id]
                confidence = "  {0}%".format(round(100 - confidence))
            else:
                id = "unknown"
                confidence = "  {0}%".format(round(100 - confidence))
                
            config.set("Quantity", "quantity", str(n+1))
            config.set("Users", str(n), str(id))
            config.set("Confidence", str(n), str(confidence))
            config.set("x", str(n), str(x))
            config.set("y", str(n), str(y))
            config.set("w", str(n), str(w))
            config.set("h", str(n), str(h))
            n = n + 1
        
        f = io.StringIO()
        config.write(f)
        sock.sendall(f.getvalue().encode('utf-8'))
        
        cv2.imshow('camera',img) 
        
        k = cv2.waitKey(10) & 0xff # Press 'ESC' for exiting video
        if k == 27:
            break
File "1.py", line 38, in <module>
config.readfp(f)
File "C:\Users\username\AppData\Local\Program s\Python\Python36\lib\configparser.py", line 763, in readfp
self.read_file(fp, source=filename)
File "C:\Users\username\AppData\Local\Program s\Python\Python36\lib\configparser.py", line 718, in read_file
self._read(f, source)
File "C:\Users\username\AppData\Local\Program s\Python\Python36\lib\configparser.py", line 1066, in _read
lineno)
configparser.DuplicateSectionError: While reading from '<???>' [line 15]: section 'Quantity' already exists


File "999.py", line 77, in <module>
config.set("Confidence", str(n), str(confidence))
File "C:\Users\username\AppData\Local\Program s\Python\Python36\lib\configparser.py", line 1193, in set
super().set(section, option, value)
File "C:\Users\username\AppData\Local\Program s\Python\Python36\lib\configparser.py", line 894, in set
value)
File "C:\Users\username\AppData\Local\Program s\Python\Python36\lib\configparser.py", line 402, in before_set
"position %d" % (value, tmp_value.find('%')))
ValueError: invalid interpolation syntax in ' -13%' at position 5
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
30.08.2018, 13:52
Цитата Сообщение от feodor Посмотреть сообщение
configparser.DuplicateSectionError: While reading from '<???>' [line 15]: section 'Quantity' already exists
Написано,что в конфиге дублируется секция, нало перед отправкой вывести и посмотреть, что там с секциями

Python
1
2
3
4
 f = io.StringIO()
config.write(f)
print(f.getvalue())
sock.sendall(f.getvalue().encode('utf-8'))
0
29 / 25 / 9
Регистрация: 26.05.2017
Сообщений: 261
30.08.2018, 13:59  [ТС]
[Quantity]

[Users]

[Confidence]

[x]

[y]

[w]

[h]

Добавлено через 3 минуты
Я думаю, все начинается с 999.py, т.к. config.readfp(f)(1.py) тоже работает некорректно.
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
30.08.2018, 14:02
Тогда на входе проверить

Python
1
2
3
4
f = io.StringIO(data.decode('utf-8'))
print(f.getvalue())
config = configparser.RawConfigParser()
 config.readfp(f)
Добавлено через 2 минуты
Цитата Сообщение от feodor Посмотреть сообщение
Я думаю, все начинается с 999.py
Цитата Сообщение от feodor Посмотреть сообщение
File "999.py", line 77, in <module>
Указана проблема в строке 77, проверьте переменную confidence
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.08.2018, 14:02

Распознавание лица на изображении (tkinter + OpenCV)
Всем доброго времени суток Делаю небольшой проект по распознаванию лица на изображении. Суть такова: 1) По нажатию на кнопку...

Opencv python распознавание показаний стрелочного прибора
Здравствуйте! Имеется код, который считывает показания вольтметра (приблизительно). Подскажите другую методику считывания, надежную. В...

Распознавание лиц с OpenCV
Уже видел тут подобную тему с кодом отсюда, только в ней человек находится на шагах выше. Я же пока что на 4 шаге. Код взял...

Распознавание лиц с OpenCv
Всем доброго времени суток. Помогите пожалуйста решить проблему поиска лица в видеопотоке. Теории начатался, знаю что нужно OpenCv и...

Программа распознавание лиц (несколько лиц сразу определить)
Здравствуйте ! Помогите доработать кодом, не могу понять. Программа распознает только одно лицо по фотографию, а мне нужно чтобы он...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru