easydl code for classify

# -*- 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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值