# -*- coding: utf-8 -*-
"""
Created on Thu Jan 21 11:33:22 2021
根据文件名筛选将混合在同一文件夹中的图片分配到不同的文件夹中
"""
import os
import shutil
from PIL import Image
import numpy as np
path = ' /zy/task/'
newpath0=' /dataset/egg_skin/'
newpath='C: /dried_fruits_dis/'
if not os.path.exists(newpath):
os.makedirs(newpath)
filelist = os.listdir(path)
for item in filelist:
print(item)
# src = cv.imread(path1+item)
# [height,width,c]= src.shape
# img_resize1 = cv.resize(src,(int(width*0.3),int(height*0.3)),interpolation=cv.INTER_CUBIC)
name = item.split('-',3)[1]
name0=item.split('-',3)[0]
if name=='0.jpg' or name=='2.jpg'or name=='3.jpg'or name=='1.jpg':
shutil.move(path+item,newpath0)
else:
shutil.move(path+item,newpath)
# -*- coding: utf-8 -*-
"""
霍夫变换检测圆,识别到圆形定位到圆形坐标
"""
import cv2 as cv
import numpy as np
import math
import os
path1='test_pic/'
newpath='egg/'
filelist = os.listdir(path1)
for item in filelist:
print(item)
src = cv.imread(path1+item)
print(src.shape)
# src = cv.imread('pic/1615201635659-2.jpg')
[height,width,c]= src.shape
img_resize1 = cv.resize(src,(int(width*0.3),int(height*0.3)),interpolation=cv.INTER_CUBIC)
dst = cv.pyrMeanShiftFiltering(img_resize1, 10, 100) #边缘保留滤波EPF
cimage = cv.cvtColor(dst, cv.COLOR_RGB2GRAY)
circles = cv.HoughCircles(cimage, cv.HOUGH_GRADIENT, 1, 50, param1=25, param2=35, minRadius=45, maxRadius=95)
circles = np.uint16(np.around(circles)) #把circles包含的圆心和半径的值变成整数
cir=circles[0][np.lexsort(circles[0][:,::-1].T)]
print(circles)
a1=[]
a2=[]
for i in range(cir.shape[0]):
if cir[i][1]<250 and cir[i][2]>50 and cir[i][1]>70 and cir[i][0]>70 and cir[i][0]<734-70:
a1.append(cir[i])
elif cir[i][1]>=250 and cir[i][2]>50 and cir[i][1]<614-70 and cir[i][0]>70 and cir[i][0]<734-70:
a2.append(cir[i])
# #筛选 或 增加 坐标
# dis_list=[]
# for x in range(len(a1)-1):
# dis=getdis(a2[x],a2[x+1])
# dis_list.append(dis)
# print(x)
# # 截取面积 保存图片
# name = item.split('.',3)[0]
# a3=a1+a2
# for x in range(len(a3)):
# roi=img_resize1[a3[x][1]-70:a3[x][1]+70,a3[x][0]-70:a3[x][0]+70]
# name1=name+'_'+str(x)+'.png'
# dst1=os.path.join(newpath,name1)
# cv.imwrite(dst1, roi)
for i in circles[0, : ]:
cv.circle(img_resize1, (i[0], i[1]), i[2], (0, 0, 255), 2) #画圆
cv.circle(img_resize1, (i[0], i[1]), 2, (0, 0, 255), 2) #画圆心
cv.imshow('input_image', img_resize1)
cv.waitKey(3000)
cv.destroyAllWindows()
# -*- coding: utf-8 -*-
"""
执行分割的代码
#输入一张图片 先定位园 后分割,保存重命名
"""
import cv2 as cv
import numpy as np
import math
import os
factor=1
path1='img/'
newpath='seg_0/'
#但卷皮参数
rad=int(300*factor )
a0=[[int(327*factor),int(353*factor)] ,[int(1047*factor),int(367*factor)]]
a1=[[int(327*factor),int(347*factor)] ,[int(1053*factor),int(367*factor)],[int(1773*factor),int(373*factor)]]
a2=[[int(333*factor),int(373*factor)],[ int(1053*factor),int(387*factor)]]
a3=[[int(413*factor),int(407*factor)] ,[ int(1133*factor),int(420*factor) ], [int(1860*factor),int(433*factor)]]
# 干果分割参数
rad=int(300*factor )
a4=[[int(317*factor),int(333*factor)] ,[int(977*factor),int(333*factor)]]
a5=[[int(317*factor),int(333*factor)] ,[int(967*factor),int(333*factor)]]
a6=[[int(317*factor),int(333*factor)],[ int(983*factor),int(333*factor)] , [int(1650*factor),int(333*factor)] ]
a7=[[int(333*factor),int(300*factor)] ,[ int(993*factor),int(300*factor)] , [int(1650*factor),int(333*factor)]]
filelist = os.listdir(path1)
for item in filelist:
print(item)
src = cv.imread(path1+item)
[height,width,c]= src.shape
img_resize1 = cv.resize(src,(int(width*factor),int(height*factor)),interpolation=cv.INTER_CUBIC)
name = item.split('-',3)[1]
name0=item.split('-',3)[0]
#这边有待改进
if item.find('-0-')!=-1:
for i in range(len(a0)):
roi=img_resize1[a0[i][1]-rad:a0[i][1]+rad,a0[i][0]-rad:a0[i][0]+rad]
name1=name0+'_'+str(i)+'.png'
dst1=os.path.join(newpath,name1)
cv.imwrite(dst1, roi)
elif item.find('-1-')!=-1:
for i in range(len(a1)):
roi=img_resize1[a1[i][1]-rad:a1[i][1]+rad,a1[i][0]-rad:a1[i][0]+rad]
name1=name0+'_'+str(i)+'.png'
dst1=os.path.join(newpath,name1)
cv.imwrite(dst1, roi)
else :
for i in range(len(a7)):
roi=img_resize1[a7[i][1]-rad:a7[i][1]+rad,a7[i][0]-rad:a7[i][0]+rad]
name1=name0+'_'+str(i)+'.png'
dst1=os.path.join(newpath,name1)
cv.imwrite(dst1, roi)
# cv.imshow('input_image', roi)
# cv.waitKey(3000)
# cv.destroyAllWindows()
# 输入:图片路径 输出为:label和置信度 单蛋卷检测
# python detect_egg_skin.py test/1615436526506-2.jpg移动到不同文件夹
# 功能: 检测
# 完成 可正常运行程序
# 正常0 卷皮破损1 底部异物2 双蛋卷3 缺少产品4
import requests
import os
import sys
import time
import socket
import cv2 as cv
import io
from PIL import Image
import socket
import shutil
# t1 = time.time()
# v2=sys.argv[1]
# item=v2
def img_tobyte(roi):
ret, buf = cv.imencode('.jpg', roi)
img_bin = Image.fromarray(np.uint8(buf)).tobytes()
return img_bin
factor=1
rad=int(300*factor )
a4=[[int(327*factor),int(353*factor)] ,[int(1047*factor),int(367*factor)]]
a5=[[int(327*factor),int(347*factor)] ,[int(1053*factor),int(367*factor)],[int(1773*factor),int(373*factor)]]
a6=[[int(333*factor),int(373*factor)],[ int(1053*factor),int(387*factor)]]
a7=[[int(413*factor),int(407*factor)] ,[ int(1133*factor),int(420*factor) ], [int(1860*factor),int(433*factor)]]
path1="seg/"
seg_path="seg_0/"
ipaddr = 'http://127.0.0.1:24401/'
filelist = os.listdir(path1)
for item in filelist:
print(item)
img=open(path1+item,"rb").read()
src = cv.imread(item)
#name = item.split('-',3)[1]
result = requests.post(ipaddr, params={'threshold': 0.03}, data=img).json()
re = result['results']
pre_label=re[0]['label']
print(pre_label,re[0]['score'])
if pre_label=="1" and re[0]['score']>0.9:
shutil.move(path1+item,seg_path+item)
# 输入:图片路径 输出为:label和置信度
#egg
# 正常0 卷皮破损1 底部异物2 双蛋卷3 缺少产品4
#top
# 0 正常 1 顶林异常 2 巧克力分布异常 3 空蛋卷 4 无产品
import cv2 as cv
import numpy as np
import math
import os
import io
from PIL import Image
import requests
import sys
import time
import socket
import traceback
#全局变量
device="bd4"
factor = 1
a=[0]*8
a[0]=[[int(327*factor),int(353*factor)] ,[int(1047*factor),int(367*factor)]]
a[1]=[[int(327*factor),int(347*factor)] ,[int(1053*factor),int(367*factor)],[int(1773*factor),int(373*factor)]]
a[2]=[[int(333*factor),int(373*factor)],[ int(1053*factor),int(387*factor)]]
a[3]=[[int(413*factor),int(407*factor)] ,[ int(1133*factor),int(420*factor) ], [int(1860*factor),int(433*factor)]]
a[4]=[[int(317*factor),int(333*factor)] ,[int(977*factor),int(333*factor)]]
a[5]=[[int(317*factor),int(333*factor)] ,[int(967*factor),int(333*factor)]]
a[6]=[[int(317*factor),int(333*factor)],[ int(983*factor),int(333*factor)] , [int(1650*factor),int(333*factor)] ]
a[7]=[[int(333*factor),int(300*factor)] ,[ int(993*factor),int(300*factor)] , [int(1650*factor),int(333*factor)]]
eggIndexList = [0,1,2,3]
topIndexList = [4,5,6,7]
def img_tobyte(roi):
ret, buf = cv.imencode('.jpg', roi)
img_bin = Image.fromarray(np.uint8(buf)).tobytes()
return img_bin
def detect(img_name): # 检测程序入口
src = cv.imread(img_name)
[height,width,c]= src.shape
img_resize1 = cv.resize(src,(int(width*factor),int(height*factor)),interpolation=cv.INTER_CUBIC)
name = img_name.split('-', 3)[1]
port = int(name.split('.', 3)[0])
ipaddr = 'http://127.0.0.1:100{}/'.format(port)
if(port in eggIndexList):
rad=int(300*factor)
else:
rad=int(267*factor)
v = []
for i in range(len(a[port])):
roi=img_resize1[a[port][i][1]-rad:a[port][i][1]+rad,a[port][i][0]-rad:a[port][i][0]+rad]
img=img_tobyte(roi)
vReturn = "0"
try:
result = requests.post(
ipaddr, params={'threshold': 0.03}, data=img).json()
re = result['results']
print(re[0]['confidence'])
if re[0]['confidence']>0.3:
vReturn = re[0]['label']
except:
vReturn = "0"
v.append(vReturn)
return v
client_send = socket.socket()
ip_port = ("10.10.29.197", 8888)
client_send.connect(ip_port)
def sendCommand(cmd): # TCP通信
global client_send
for i in range(5000):
try:
client_send.sendall(bytes(cmd, encoding="utf-8"))
data = client_send.recv(1024)
#client_send.close
except Exception as e:
print('str(Exception):\t', str(Exception))
print('str(e):\t\t', str(e))
print('repr(e):\t', repr(e))
# Get information about the exception that is currently being handled
exc_type, exc_value, exc_traceback = sys.exc_info()
print('e.message:\t', exc_value)
print("Note, object e and exc of Class %s is %s the same." %
(type(exc_value), ('not', '')[exc_value is e]))
print('traceback.print_exc(): ', traceback.print_exc())
print('traceback.format_exc():\n%s' % traceback.format_exc())
time.sleep(0.1)
client_send = socket.socket()
client_send.connect(ip_port)
print('发送命令[{}]时与主程序连接失败,次数:{}'.format(cmd, i+1))
if(i >= 500):
print('退出')
sys.exit()
#continue
else:
break
return str(data, encoding="utf-8").split("\n", 1)[0]
def sysPrint(txt): # 清屏输出
os.system("cls")
print(txt)
if __name__ == "__main__":
debug = False # 正式布署
#debug = True # 本地调试模式
if(debug):
t1 = time.time()
print("detect result:")
print(detect("1639882393715-0.jpg"))
t1 = time.time()-t1
print(t1)
sys.exit()
print("wait for detect...")
while(True):
task = sendCommand("task|{}".format(device))
if(task == ""):
time.sleep(0.1)
continue
img_create_time = int(task.split('-', 3)[0])
cmd = detect("Y:/{}.jpg".format(task))
t1 = round(time.time()*1000)
cmd = "detect|{}|{}|{}".format(task, cmd, t1)
sendCommand(cmd)
sysPrint("检测:{}.jpg 用时:{}毫秒".format(task, t1-img_create_time))