自动判卷 、答题卡识别、六级答题卡客观题自动判卷系统1.0

自动判卷 、答题卡识别、六级答题卡客观题自动判卷系统1.0

一、前言

二、代码

三、处理原图片、以及效果图片

四、总结

  • 一.引言:
    1.本程序设计想法来源于一次四六级考试,因为六级没有好好准备,裸考上阵,结果肯定是看不懂哈哈哈,边做还边走神,想着既然学了opencv,要不自己搞个六级的判卷系统玩玩。于是考试完就网上找了一张六级答题卡彩印后随便填涂一些信息。总共跨越一两个月才完成吧(一直完成其它事情拖着)。但是写程序时间就三天左右。一方面是因为答题卡的质量,是A4纸,以及放书包有些变形,导致处理起来有些麻烦。
    2.目前的自动判卷以及答题卡识别是很多人都做过的,我也只是练习一下,其实还有很多需要改进的。
    3.本程序大家可以代码直接复制过去,然后根据我提供的图片,将图片路径改一下,运行就可以用了哦。如果没有对应的一些包,可以在终端输入一下代码就行啦。(package:需要下载的库)
pip install --index-url https://pypi.douban.com/simple   package
  • 二.程序总代码:

"""
程序思路:
1.首先参考网上试卷检测的相关例程,模仿着来,网上大部分检测部分基本用的Canny算法,
但是我用了试过调Canny函数的参数、以及通过图像增强进行边缘检测,但是效果不佳,出现断断续续的效果,不能用于检测图片。2.出现这种情况,我对各种边缘检测算法进行了尝试,其中sobel的边缘检测算法效果比较好,laplacian算法较为一般。3.当轮廓提取出来后,下一步就是对轮廓进行了框选,我一开始的想法只是外接矩形,或者一个正接的矩形,先是保留自己的看法,
参考网上,基本都是Canny边缘检测算法后进行霍夫直线的检测。我也就跟着进行霍夫直线试了很多次,但是效果一直不佳,
一方面是我答题卷四条边直线度的问题,由于不是纯的直线,所以进行直线检测的时候就会出现很多杂乱的曲线。网上的例子能检测出直线,
然后进行求四个交点,方便后面进行透视变换。由于这个方法行不通,所以准备换另一种方法进行检测框。4.这个时候我就参数了二值化的两种方法,其中就是全局二值化,另一个是局部阈值化,全局二值化只是用一个阈值进行分割,局部阈值化能进行手动设置图片的阈值个数
二值化之后进行进行框选了,这个时候我就开始按照一开始的想法进行狂框选了,用的是最小外接矩形,与正接矩形,但是因为框选出来的误差太大,除了试卷还有很多背景
后面进行发现最大轮廓————>填充颜色————>sobel边缘检测(看看会不胡边缘会端正了很多,但是结果跟没天赐差不多)
————>发现可以用拟合矩形进行检测。于是我就尝试了利用sobel+拟合矩形的方式进行检测,结果效果不错,但是存在另一个问题,一方面答题卷没有完全拍摄到的时候就会出现框选不出来。、5.改进,为什么不直接用二值化直接检测答题卷呢,最后直接二值化+矩形拟合,检测多张图片后效果良好。"""#遇到问题:1-3图片角度跟7——16的图片角度不一样,导致识别方向出现了问题,故可以利用获取坐标点进行排序。
# 功能:利用二值化+矩形拟合
# 链接:https://blog.csdn.net/xue_csdn/article/details/97616177
# 矩形拟合:https://segmentfault.com/a/1190000015663722
# 透视变换坐标对应:https://blog.csdn.net/xxxy502/article/details/89668722#:~:text=python%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%EF%BC%9A%E9%80%8F%E8%A7%86%E5%8F%98%E6%8D%A2%E5%8E%9F%E7%90%86%E6%95%88%E6%9E%9C%E4%BB%A3%E7%A0%81%20%E5%8E%9F%E7%90%86%20%E9%80%8F%E8%A7%86%E5%8F%98%E6%8D%A2%28Perspective%20Transformation%29%E6%98%AF%E5%B0%86%E5%9B%BE%E7%89%87%E6%8A%95%E5%BD%B1%E5%88%B0%E4%B8%80%E4%B8%AA%E6%96%B0%E7%9A%84%E8%A7%86%E5%B9%B3%E9%9D%A2%28Viewing,Plane%29%EF%BC%8C%E4%B9%9F%E7%A7%B0%E4%BD%9C%E6%8A%95%E5%BD%B1%E6%98%A0%E5%B0%84%28Projective%20Mapping%29%E3%80%82%20%E9%80%9A%E7%94%A8%E7%9A%84%E5%8F%98%E6%8D%A2%E5%85%AC%E5%BC%8F%E4%B8%BA%EF%BC%9A%20%20u%2Cv%E6%98%AF%E5%8E%9F%E5%A7%8B%E5%9B%BE%E7%89%87%E5%9D%90%E6%A0%87%EF%BC%8C%E5%AF%B9%E5%BA%94%E5%BE%97%E5%88%B0%E5%8F%98%E6%8D%A2%E5%90%8E%E7%9A%84%E5%9B%BE%E7%89%87%E5%9D%90%E6%A0%87x%2Cy%2C%E5%85%B6%E4%B8%AD%E3%80%82
# coding=utf-8# 导入相关的库
import cv2
import cv2 as cv
import numpy as np
from functools import reduce
import operator
import mathdef ad_number(pos):"""准考证号识别"""list_y = [190,245,300,355,400,460,520,570,630,680]list_num = [0,1,2,3,4,5,6,7,8,9]for i,y  in enumerate(list_y):if pos >y-25 and pos <y+25:return list_num[i]def l_optioon(pos,bb,rn):"""对左边选择题轮廓的中心坐标与选项坐标进行比较,对选择正确与否进行判断"""b  = bblist_x = [400, 460, 525, 590, 656, 715, 780, 840, 900, 950, 1020, 1080, 1130, 1200, 1260, 1330, 1400, 1460, 1525]answer = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S']right_answer = ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D','A', 'B', 'C', 'D', 'A' ]for i,x  in enumerate(list_x):if pos >x-20 and pos <x+20:if answer[i]==right_answer[b]:color = (255,0,0)rn +=1else:color = (0, 0, 255)return answer[i],color,rndef r_optioon(pos,bb,rn):"""对右边选择轮廓形心进行判断所在位置的选项,以及跟正确答案做比较"""b = bb# print(b)list_x = [ 1140, 1210, 1270, 1330]answer = ['A', 'B', 'C', 'D']right_answer  = [ 'B', 'C', 'D','A','B']for i,x  in enumerate(list_x):if pos >x-20 and pos <x+20:if answer[i] == right_answer[b]:color = (255, 0, 0)rn +=1else:color = (0, 0, 255)return answer[i], color,rndef begin():"""打印一些提示的信息"""print("\n\n***************************************************************************************************")print("*                                                 欢迎使用                                          *")print("*                                            六级客观题自动判卷系统                                   *")print("***************************************************************************************************")print("-" * 40)print("1.选择标准答案为:\t")test_answer = ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D','A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B']for i, answer in enumerate(test_answer):print(str(i + 36) + ":" + answer, end="\t")if (i + 36) % 5 == 0:"""对打印进行每几个打一行"""print()print("-" * 40)def Perspective_transformation(img):gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 进行灰度化、减少运算量blurred = cv2.GaussianBlur(gray, (7, 7), 0)  # 对图片进行高斯模糊、防止椒盐噪声的干扰retval, binary = cv2.threshold(blurred, 120, 255, cv2.THRESH_BINARY)  # 利用全局二值化对答题卷进行识别kernel_1 = cv.getStructuringElement(cv.MORPH_RECT, (17, 17))  # 定义卷积核erode = cv.erode(binary, kernel_1)  # 进行腐蚀,去杂点dilate = cv.dilate(erode, kernel_1)  # 进行膨胀还原contours = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]  # 发现最外边轮廓area_list = []for c in contours:"""获取面接列表"""area_list.append(cv.contourArea(c))# -----------------------------------进行透视变换---------------------------------#dist = 30for c in contours:if cv.contourArea(c) == max(area_list):epsilon = 0.1 * cv2.arcLength(c, True)approx = cv2.approxPolyDP(c, epsilon, True)cv2.polylines(img, [approx], True, (0, 255, 255), 18)coords = [[[approx][0][0][0][0], [approx][0][0][0][1]], [[approx][0][1][0][0], [approx][0][1][0][1]],[[approx][0][2][0][0], [approx][0][2][0][1]], [[approx][0][3][0][0], [approx][0][3][0][1]]]center = tuple(map(operator.truediv, reduce(lambda x, y: map(operator.add, x, y), coords), [len(coords)] * 2))x_y = sorted(coords, key=lambda coord: (-135 - math.degrees(math.atan2(*tuple(map(operator.sub, coord, center))[::-1]))) % 360, reverse=True)# print("[approx]:\n%s"%[approx])#打印获取的坐标# print(x_y)    # 打印顺时针坐标former = np.float32([x_y[0],x_y[3],x_y[2],x_y[1]])# 变换之后的四个角点坐标pts = np.float32([[0, 0],[0, x_y[3][1] - x_y[0][0]],[x_y[1][0] - x_y[0][0], x_y[3][1] - x_y[0][0]],[x_y[1][0] - x_y[0][0], 0]])# 变换矩阵MM = cv2.getPerspectiveTransform(former, pts)# 当然这一过程可以用cv2中函数实现po1 = cv2.perspectiveTransform(np.array([[[100, 50]]], dtype=np.float32), M)result = cv2.warpPerspective(img, M, (x_y[1][0] - x_y[0][0], x_y[3][1] - x_y[0][0]))return resultdef get_roi(result):gray = cv.cvtColor(result, cv.COLOR_BGR2GRAY)b_h = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY_INV, 101, 6)  # 局部大津算法二值化kernel_hb = cv.getStructuringElement(cv.MORPH_RECT, (23, 23))b_h = cv.morphologyEx(b_h, cv.MORPH_OPEN, kernel_hb, iterations=1)# ----------------------------------提取框架---------------------------------#l_b = cv.GaussianBlur(result, (5, 5), 1)  # 进行模糊去噪点l_hsv = cv.cvtColor(l_b, cv.COLOR_BGR2HSV)  # 转换为HSV色彩空间lower = np.array([134, 21, 11])  # 红色低阈值upper = np.array([179, 255, 255])  # 红色高阈值l_mask = cv2.inRange(l_hsv, lower, upper)  # 获取目标颜色单通道图片contours = cv2.findContours(l_mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]  # 获取图片的轮廓    对HSV的图像进行二值化需要用到这个content = []  # 获取上面三个矩形框line = []  # 三条线条# i = 0       # 线条序号# j = 0       # 内容序号for c in contours:if cv.contourArea(c) > 5000:"""过滤一些不必要的轮廓"""x, y, w, h = cv.boundingRect(c)  # 获取矩形框的四个参数mm = cv.moments(c)  # 几何重心的获取cx = mm['m10'] / mm['m00']  # 获取几何重心的xcy = mm['m01'] / mm['m00']  # 获取几何重心的yif w / h > 2:"""对长条形红色线框进行追加"""# i+=1# cv2.circle(result, (np.int(cx), np.int(cy)), 15, (0, 255, 0), -1)  # 画出中心# cv.rectangle(result, (x, y), (x + w, y + h), (255, 0, 0), 10)  # 画外接矩形# cv.putText(result, str(i), (np.int(cx), np.int(cy)), cv.FONT_HERSHEY_SIMPLEX, 4,(255,255,0), 10)line.append(c)else:"""对内容框进行追加"""# j += 1# cv.rectangle(result, (x, y), (x + w, y + h), (255, 255, 0), 10)  # 画外接矩形# cv.putText(result, str(j), (np.int(cx), np.int(cy)), cv.FONT_HERSHEY_SIMPLEX, 4,(255,255,0), 30)content.append(c)# ------------------------------获取学号以及选项区域------------------------------------#x1, y1, w1, h1 = cv.boundingRect(content[2])  # 获取学号位置线框轮廓正接矩形x2, y2, w2, h2 = cv.boundingRect(line[1])  # 获取第二条红色框轮廓正接矩形x3, y3, w3, h3 = cv.boundingRect(line[0])  # 获取第条红色框轮廓正接矩形cv.rectangle(result, (x1, y1), (x1 + w1, y1 + h1), (255, 0, 0), 20)  # 画外接矩形cv.rectangle(result, (x2, y2 + h2), (x2 + w2, y3), (255, 0, 0), 20)  # 画外接矩形# --------------------------------选取roi-----------------------------------#roi_1_b_h = b_h[y1:y1 + h1, x1:x1 + w1]roi_2_b_h = b_h[y2 + h2:y3, x2:x2 + w2]roi_1 = result[y1:y1 + h1, x1:x1 + w1]roi_2 = result[y2 + h2:y3, x2:x2 + w2]return  roi_1_b_h,roi_2_b_h,roi_1,roi_2,b_hdef sort_stu_num_oul(roi_1_b_h):# -----------------------------学号轮廓排序------------------------------------#contours_1 = cv2.findContours(roi_1_b_h, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]  # 获取图片的轮廓    对HSV的图像进行二值化需要用到这个list_x1 = []  # 定义一个列表、用于储存每个轮廓对应的X坐标sort_contours_1 = []  # 用于储存排序好的轮廓for n, c_1 in enumerate(contours_1):"""遍历轮廓对x坐标及逆行排序"""x, y, w, h = cv.boundingRect(c_1)list_x1.append(x)list_x2 = list_x1.copy()  # copy出来的列表用来排序list_x2.sort(reverse=False)for i in range(len(list_x1)):"""对应的轮廓进行按找list_x2的顺序追加,行程按照x顺序排列的轮廓,sort_contours_1 """sort_contours_1.append(contours_1[list_x1.index(list_x2[i])])l = 0test_number = []for c_1 in sort_contours_1:"""在轮廓中画出序号、"""l += 1x, y, w, h = cv.boundingRect(c_1)# 获取矩形框的四个参数mm = cv.moments(c_1)  # 几何重心的获取cx = mm['m10'] / mm['m00']  # 获取几何中心的xcy = mm['m01'] / mm['m00']  # 获取几何重心的ycv.rectangle(roi_1, (x, y), (x + w, y + h), (0, 255, 0), 5)  # 画外接矩形# cv.putText(roi_1, str(l), (np.int(cx), np.int(cy)), cv.FONT_HERSHEY_SIMPLEX, 2,(255,0,0), 3)num = ad_number(cy)test_number.append(num)  # 准考证号cv.putText(roi_1, str(num), (x, 80), cv.FONT_HERSHEY_SIMPLEX, 2.4, (0, 0, 255), 5)print("2.考生准考证号码为:\t", end="")for i in test_number:print(i, end="")print()def opt(roi_2_b_h):# -----------------------------学号选择发现轮廓------------------------------------#contours_2 = cv2.findContours(roi_2_b_h, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[1]  # 获取图片的轮廓    对HSV的图像进行二值化需要用到这个# -----------------------------选择轮廓排序------------------------------------#yl_contours_2 = []  # 储存左边轮廓yr_contours_2 = []  # 储存右边轮廓sort_contours_l2 = []  # 用于储存排序好的轮廓sort_contours_r2 = []  # 用于储存排序好的轮廓list_yl1 = []  # 定义一个列表、用于储存每个轮廓对应的X坐标list_yr1 = []  # 定义一个列表、用于储存每个轮廓对应的X坐标list_x3 = []for i, c_2 in enumerate(contours_2):x, y, w, h = cv.boundingRect(c_2)# 获取矩形框的四个参数mm = cv.moments(c_2)  # 几何重心的获取cx = mm['m10'] / mm['m00']  # 获取几何中心的xcy = mm['m01'] / mm['m00']  # 获取几何重心的y# print( str(i)+"\t"+str(y) +"\t"+ str(x))if y < 1650 or x < 1000:list_yl1.append(y)yl_contours_2.append(c_2)else:list_yr1.append(y)list_x3.append(x)yr_contours_2.append(c_2)# --------------对左边轮廓进行排序---------------------------list_yl2 = list_yl1.copy()list_yl2.sort(reverse=False)for i in range(len(list_yl1)):sort_contours_l2.append(yl_contours_2[list_yl1.index(list_yl2[i])])# ----------------------画出左边轮廓----------------------------------m = 35answer_l_list = []rn = 0for c_2 in sort_contours_l2:m += 1x, y, w, h = cv.boundingRect(c_2)# 获取矩形框的四个参数mm = cv.moments(c_2)  # 几何重心的获取cx = mm['m10'] / mm['m00']  # 获取几何中心的xcy = mm['m01'] / mm['m00']  # 获取几何重心的ycv.putText(roi_2, str(m), (200, np.int(cy) + 20), cv.FONT_HERSHEY_SIMPLEX, 1.7, (255, 0, 0), 4)answer_l, color, rn = l_optioon(cx, (m - 36), rn)answer_l_list.append(answer_l)cv.rectangle(roi_2, (x, y), (x + w, y + h), color, 5)  # 画外接矩形cv.putText(roi_2, answer_l, (np.int(cx) + 100, np.int(cy)), cv.FONT_HERSHEY_SIMPLEX, 2, color, 4)# ----------------------画出右边轮廓-----------------------------list_yr2 = list_yr1.copy()list_yr2.sort(reverse=False)for i in range(len(list_yr1)):sort_contours_r2.append(yr_contours_2[list_yr1.index(list_yr2[i])])n = 60answer_r_list = []for c_2 in sort_contours_r2:n += 1x, y, w, h = cv.boundingRect(c_2)# 获取矩形框的四个参数mm = cv.moments(c_2)  # 几何重心的获取cx = mm['m10'] / mm['m00']  # 获取几何中心的xcy = mm['m01'] / mm['m00']  # 获取几何重心的ycv.putText(roi_2, str(n), (920, np.int(cy) + 20), cv.FONT_HERSHEY_SIMPLEX, 2, (255, 0, 0), 4)# cv.putText(roi_2, str(m), (130, np.int(cy)-20), cv.FONT_HERSHEY_SIMPLEX, 1.7,(255,0,0), 4)answer_r, color, rn = r_optioon(cx, n - 61, rn)answer_r_list.append(answer_r)cv.putText(roi_2, answer_r, (np.int(cx) + 100, np.int(cy)), cv.FONT_HERSHEY_SIMPLEX, 2, color, 4)cv.rectangle(roi_2, (x, y), (x + w, y + h), color, 5)  # 画外接矩形# print(answer_r_list)print("-" * 40)your_ansewer = answer_l_list + answer_r_listprint("3.学生填选答案为:\t")for i, answer in enumerate(your_ansewer):print(str(i + 36) + ":" + answer, end="\t")if (i + 36) % 5 == 0:print()print("-"*40)print("4.分数为:\t",end='')print(rn*2)print("-"*50+"试卷批改完毕"+"-"*50)#------------------图像预处理--------------------------------
img = cv2.imread("F:\\img\\test_paper\\15.jpg") # 读取图片、为BGR格式begin()
result = Perspective_transformation(img)
roi_1_b_h,roi_2_b_h,roi_1,roi_2,b_h = get_roi(result)
sort_stu_num_oul(roi_1_b_h)
opt(roi_2_b_h)# result[y1:y1+h1,x1:x1+w1]=roi_1
# result[y2+h2:y3,x2:x2+w2]=roi_2cv.imwrite(".\\img\\result_11.jpg",result)
cv2.namedWindow("result",0)
cv2.imshow("result",result)
cv2.namedWindow("roi_2_b_h",0)
cv2.imshow("roi_2_b_h",roi_2_b_h)
cv2.namedWindow("roi_1_b_h",0)
cv2.imshow("roi_1_b_h",roi_1_b_h)
cv2.namedWindow("img",0)
cv2.imshow("img",img)cv2.waitKey(0)
cv2.destroyAllWindows()
  • 三、处理原图片、以及效果图片
    1.原图片(是不是很清晰以及有些小变形,用边缘检测我提取不出来)
    在这里插入图片描述
    2.效果图片
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 四、总结

1.本次程序存在缺陷,由于纸张的问题,以及背景的问题,手机拍摄的问题,还有我技术的问题,目前只能处理我上次的那张照片。由于时间的关系,后面我会利用某宝购买答题纸,利用USB工业相机进行拍摄,对处理算法进行优化。到时候再跟大家讲解一些实现思路。
2.本次代码没有用太多时间去整理,以及备注更多的内容,就是直接写完copy上来而已。所以有些乱。
3.对本文需要改进的地方大家可以多多留言、
4.觉得不错的小伙伴帮我帮我点个赞或者关注我支持一下哦!

  • 五、其他文章

1.理论系列:

第一章:pycharm、anaconda、opencv、pytorch、tensorflow、paddlex等环境配置大全总结【图像处理py版本】

第二章:OpenCv算法的基本介绍与应用

第三章:OpenCv图片、视频读写操作与基本应用

第四章:OpenCv阈值分割/二值化(单通道、多通道图片)总结


2.项目系列:

》》》项目一:四六级改卷系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/48684.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商促销海报PSD模板|临摹优秀,设计好的banner广告从试炼开始!

每当你打开淘宝时&#xff0c;首页的banner广告总是会弹出你近期浏览过的或者是购买过的同类产品&#xff0c;这就是淘宝善于使用个人大数据&#xff0c;从而达到精准推广的效果。 而设计师在设计banner广告图之前&#xff0c;一般会参考之前投放的结果数据&#xff0c;例如设计…

端午节海报|端午节海报设计素材图片大全

2021年端午节放假时间安排表出来了&#xff0c;端午节海报也要准备起来啦&#xff01;快来把这组端午节海报收藏起来吧&#xff01; 所有素材均来自易图网&#xff0c;需要的话可以点击链接下载噢。 1、端午节粽子上市宣传海报 2、情浓端午清新海报设计 3、水墨风端午节海报设…

2023年AP考试报名开始,附详细报名流程和注意事项,社会考生速来

9月19日&#xff0c;美国大学理事会College Board 宣布大陆2023年AP考试报名正式开启。在2022-23学年&#xff0c;大学理事会继续与Prometric合作管理国内的AP考试报名和考务工作。 目前&#xff0c;2023年5月举行的AP考试报名工作已经正式启动&#xff0c;下面是2023年AP考试…

手绘风海报怎么做?手绘素材在哪里找?

打开浏览器搜索“易图网”&#xff0c;这个素材网站有很多手绘风作品和素材&#xff0c;原创设计&#xff0c;为您的设计增添无限灵感&#xff0c;比如下面几张海报就是最近更新的手绘风作品。 保护动物手绘动物绿色植物合集海报 保护动物海报手绘简单卡通森林动物海报 2022春…

用ps做一张海报

用ps做的一张海报 作者&#xff08;张福林&#xff09;撰写时间&#xff1a;2019年 1月 17日 见截图 &#xff08;海报里传达的地址、网址、电话号码&#xff0c;是因为创作需要而找来的请勿当真&#xff09; &#xff08;这是我在2018年12月二十几号做的一个关于元旦促销的海…

使用Photoshop制作圣诞海报

使用Photoshop制作圣诞海报 我们最终制作效果如下&#xff1a; 1.新建文档 文件——》新建&#xff0c;宽1134px&#xff0c;高850px&#xff0c;分辨率为300命名为圣诞海报的文档 2.设置背景渐变 选中背景图层&#xff0c;选择工具箱的渐变工具&#xff0c;在属性栏找到渐变…

计算机专业迎新晚会主题海报,如何制作迎新晚会宣传海报?推荐使用迎新海报素材!...

迎接新生晚会是校园内热烈欢迎新生儿必备的节目。在晚会节目上有才能的学生可以展示自己才艺表演。学生会为了让更多的学生参加晚会&#xff0c;都会提前张贴晚会宣传海报&#xff0c;告知学生晚会的时间、地点以及节目内容。在这里&#xff0c;小编想告诉大家&#xff0c;迎新…

用这套偷懒笔刷5分钟一副国潮插画海报,轻松玩转海报设计

好东西又来了 这次给大家带来的是 新国风飞鹤月亮祥云笔刷合集86款 像仙鹤&#xff0c;海浪&#xff0c;灵芝&#xff0c;鱼骨纹&#xff0c;灯笼&#xff0c;月亮&#xff0c;云纹 这里面都有 主要是它还兼容PS和ipad使用 在插画当中&#xff0c;现在最火的也属于国潮&#xf…

今日份PS练习|玉桂狗海报

可爱的玉桂狗来了哦&#xff01; 第一步 新建白色背景图层,把默认颜色换成黑白,滤镜-渲染-云彩,滤镜-模糊一高斯模糊;图像-调整-色调分离-拉动数值一确定 第二步 选择魔棒工具,调整数值,根据颜色选择色块,选中后按altdelete,填充颜色,改变后&#xff0c;复制一层&#xff0c…

今日份PS练习|长春花蓝海报设计稿预览

第一步 新建图层&#xff0c;用白色画笔画一个圆&#xff0c;笔刷硬度为0&#xff0c; 新建图层&#xff0c;滤镜-渲染-云彩&#xff0c;将云彩透明度改为30&#xff0c;再合并图层 第二步 将图层&#xff0c;滤镜-像素化-晶格化&#xff0c;调整数值。 将图层&#xff0c;…

如何用ps设计出一张吸引人眼球的创意节日海报?

不管做什么海报&#xff0c;重要的都是表达&#xff0c;节日海报更主要的是表达一种情怀。 比如中秋&#xff0c;月亮肯定是必备的元素&#xff0c;它表达的是中华民族几千年来对亲人、朋友、爱人的情思&#xff0c;所以海报上使用月亮元素非常常见&#xff1b;再比如国庆&…

探究ChatGPT在医学影像领域中的发展前景

医学影像技术是当今医疗领域的重要组成部分&#xff0c;广泛应用于临床诊断、治疗和研究等方面。然而&#xff0c;医学影像所涉及到的数据量非常大&#xff0c;难以直接进行人工分析和处理。因此&#xff0c;如何快速、准确地对医学影像数据进行自动化处理和分析&#xff0c;成…

斯坦福发布大模型Alpaca:A100上训3小时,性能比较GPT-3.5,被挤爆!

源&#xff5c;新智元 Meta的LLaMA模型开源&#xff0c;让文本大模型迎来了Stable Diffustion时刻。今天&#xff0c;斯坦福发布了一个由LLaMA 7B微调的模型Alpaca&#xff0c;训练3小时&#xff0c;性能比肩GPT-3.5。 一觉醒来&#xff0c;斯坦福大模型Alpaca&#xff08;草泥…

数控数据采集跨平台免授权扎克(mazak)西门子(Siemens)海德汉(heidenhain)广数(GSK)、凯恩帝(knd)、三菱、海德汉、兄弟、哈斯、宝元、新代、发那科(Fanuc)、华中

目录 前言 一、各类数控机床采集方案 1.Fanuc发那科数控 2.广数数控 3.西门子数控 4.MAZAK马扎克数控 5.HASS哈斯数控 6.新代数控 7.KND凯恩帝数控 8.Brother兄弟数控 9.HNC华中数控 10.三菱数控 11.台湾LNC宝元数控 12.HEIDENHAIN 海德汉数控 13.行业数控系统数…

思科(Netacad)账号注册教学,完美解决登录时找不到该账号的问题,亲身实测可用。最新最详细

学习Cisco.Packet.Tracer思科模拟器的时候需要登录思科网络学院的账号&#xff0c;注册步骤如下&#xff1a; 步骤一、 在浏览器中打开 Cisco Networking Academy Builds IT Skills & Education For Future Careers 思科的官网后&#xff0c;点击登录 步骤二、 点完登录…

2023 最新大猿人中控充值系统源码 免授权

支持公众号H5 分销等功能 大猿人中控系统目前是市面上用的最多的电话费充值中控系统&#xff0c;支持代理分销、公众号H5、API接口对接等功能&#xff0c;也是目前最完善的一款中控系统&#xff0c;前端全开源&#xff0c;已破解免授权&#xff01; 配置环境&#xff1a;php7…

高速AD采集项目JESD204B采集卡详细上板教程

本文为明德扬原创文章&#xff0c;转载请注明出处&#xff01; 明德扬通过JESD204B协议等完成此高速AD采集工程。综合上板后&#xff0c;可以使用上位机通过千兆网来配置AD9144和AD9516板卡&#xff0c;实现高速ad采集。最终可以在示波器和上位机上采集到&#xff0c;设定的频率…

CUAV RTK初步使用体验和感受

记录使用RTK进行无人机定位并操作的使用体验 一. RTK定位设置 使用的是CUAV制作发售的RTK&#xff0c;型号为C9P&#xff0c;目前该产品已经下架&#xff0c;上新了C9PS。 并不需要太多的设置&#xff0c;在飞控接入RTK后&#xff08;也包括普通的GPS模块&#xff09;&#xff…

有人正利用ChatGPT争取实现财务自由提前退休?看下他们是怎么做的

如果你想要大幅提高收入&#xff0c;达成提前退休的目标&#xff0c;不妨参考如何借助ChatGPT。 一、开展咨询副业 如果你在某个领域拥有专业知识&#xff0c;请考虑开展咨询业务&#xff0c;以加速实现早期退休。过程中当然需要核实ChatGPT生成的文本。它能帮助你生成具有会…

商业分析师必备技能之行业研究

小飞象交流会 你我都没有资格去轻视每一个无论身处何种困境都秉持赤子之心努力前行的人。 内部交流│21期 商业分析师必备技能之 行业研究 data analysis ●●●● 分享人&#xff1a;萨缪尔 ‍ 行业研究分析&#xff0c;是帮助我们解决问题的手段。大到给老板做宏观经济分析&a…