精华内容
下载资源
问答
  • 做协力一年多了,一直在做对日项目,这边没有外网,我家里自己又没有电脑,近期打算买电脑...//添加模糊的原理是退后台的时候,截图将图片添加高斯模糊滤镜,添加在window 上,退到后台系统会对app进行截图,用于显...

    做协力一年多了,一直在做对日项目,这边没有外网,我家里自己又没有电脑,近期打算买电脑,把以往发布的没用有问题的进行一些修复……这一年多也没研究什么新东西,整了整storyboard ,看了一年多的日语书,这几天项目添加了一个退后台模糊效果,是swift代码,写的不好供参考
    在这里插入图片描述

    //添加模糊的原理是退后台的时候,截图将图片添加高斯模糊滤镜,添加在window 上,退到后台系统会对app进行截图,用于显示多任务的卡片,这样系统截到的就是添加了模糊的图片
    //懒加载,只创建一次,只添加一次
    lazy var appSafeView : UIImageView = {
    let safeView = UIImageView(frame: UIScreen.main.bounds)
    self.window?.addSubview(safeView)
    return safeView
    }()
    func updateImage(){
    //进行截图,添加模糊
    UIGraphicsBeginImageContextWithOptions((self.window?.bounds.size)!, true, 0.0)
    self.window?.layer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    //
    let context = CIContext.init(options: nil)
    let inputImage = CIImage.init(cgImage: (image?.cgImage)!)
    let filter = CIFilter.init(name: “CIGaussianBlur”)
    filter?.setValue(inputImage, forKey: kCIInputImageKey)
    // filter?.setValue(20, forKey: “inputRadius”)
    let result : CIImage = filter?.value(forKey: kCIOutputImageKey) as! CIImage
    let cgImage : CGImage = context.createCGImage(result, from: inputImage.extent)!
    let blurImage = UIImage.init(cgImage: cgImage)
    self.appSafeView.image = blurImage
    }
    func applicationDidEnterBackground(_ application: UIApplication)
    {
    self.updateImage()
    self.appSafeView.alpha = 1
    }
    func applicationWillEnterForeground(_ application: UIApplication)
    {
    self.appSafeView.alpha = 0
    }
    /// 前台直接双击home键进卡片多任务加模糊,支付宝没有这个效果,其实不该有的,但客户需求就加上了,这一步还没有全面测试,目前知道的是下拉通知栏和上拉控制栏,模糊效果会有点暂时
    func applicationWillResignActive(_ application: UIApplication)
    {
    self.updateImage()
    self.appSafeView.alpha = 1
    }
    func applicationDidBecomeActive(_ application: UIApplication)
    {
    self.appSafeView.alpha = 0

    }
    
    展开全文
  • 有个客户有这样的一个需求,想做一个视频播放网站,所有视频以图片列 表的形式显示,当用户点击图片的视频,可以在页面下方播放指定的电影。 那 么现在开始学习 HTML,完成视频网站的制作吧! 2,任务过程 使用&...

    目录

    一,视频网站训练任务

    1,任务概述

    2,任务过程

    3,任务线索

    4,参考代码

    4.1 工程结构

    4.2 参考代码


    一,视频网站训练任务

    1,任务概述

    有个客户有这样的一个需求,想做一个视频播放网站,所有视频以图片列 表的形式显示,当用户点击图片的视频,可以在页面下方播放指定的电影。 那 么现在开始学习 HTML,完成视频网站的制作吧!

    2,任务过程

    使用<img>完成电影列表的显示 

    使用 iframe 引入单个电影页面 

    当点击图片的时候,在下方的 iframe 中切换图片对应的电影

    3,任务线索

    视频: HTML 框架标签、HTML 多媒体标签 

    参考手册:https://www.w3school.com.cn/html/index.asp 

    文档: HTML 框架标签.pdf、HTML 多媒体标签.pdf

    4,参考代码

    4.1 工程结构

     

    4.2 参考代码

    Demo.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
    	<h1>自定义视频网站</h1>
    	<p align="center">
    		<a href="video1.html" target="myFrame"><img src="./images/1.jpg" width="20%" title="视频1"></a>
    		<a href="video2.html" target="myFrame"><img src="./images/2.jpg" width="20%" title="视频2"></a>
    		<a href="video3.html" target="myFrame"><img src="./images/3.jpg" width="20%" title="视频3"></a>
    		<a href="video4.html" target="myFrame"><img src="./images/4.jpg" width="20%" title="视频4"></a>
    	</p>
    	<p align="center">
    		<a href="video5.html" target="myFrame"><img src="./images/11.jpg" width="20%" title="视频5"></a>
    		<a href="video6.html" target="myFrame"><img src="./images/22.jpg" width="20%" title="视频6"></a>
    		<a href="video7.html" target="myFrame"><img src="./images/33.jpg" width="20%" title="视频7"></a>
    		<a href="video8.html" target="myFrame"><img src="./images/44.jpg" width="20%" title="视频8"></a>
    	</p>
    
    	<p align="center">
    		<iframe name="myFrame" frameborder="0" width="70%" height="550px"></iframe>
    	</p>
        
     
    </body>
    </html>

    video1.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <p align="center">
            <video  poster="./images/1.jpg" width="100%" src="./images/fun.mp4" autoplay="autoplay"></video>
        </p>
    </body>
    </html>

    video2.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <p align="center">
            <video controls="controls" poster="./images/2.jpg" width="100%" src="./images/fun.mp4" autoplay="autoplay"></video>
        </p>
    </body>
    </html>

    video3.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <p align="center">
            <video controls="controls" poster="./images/3.jpg" width="100%" src="./images/fun.mp4" autoplay="autoplay"></video>
        </p>
    </body>
    </html>

    video4.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <p align="center">
            <video controls="controls" poster="./images/4.jpg" width="100%" src="./images/fun.mp4" autoplay="autoplay"></video>
        </p>
    </body>
    </html>

    video5.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <p align="center">
            <video controls="controls" poster="./images/11.jpg" width="100%" src="./images/fun.mp4" autoplay="autoplay"></video>
        </p>
    </body>
    </html>

    video6.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <p align="center">
            <video controls="controls" poster="./images/22.jpg" width="100%" src="./images/fun.mp4" autoplay="autoplay"></video>
        </p>
    </body>
    </html>

    video7.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <p align="center">
            <video controls="controls" poster="./images/33.jpg" width="100%" src="./images/fun.mp4" autoplay="autoplay"></video>
        </p>
    </body>
    </html>

    video8.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <p align="center">
            <video controls="controls" poster="./images/44.jpg" width="100%" src="./images/fun.mp4" autoplay="autoplay"></video>
        </p>
    </body>
    </html>

    章节汇总在这里(づ ̄3 ̄)づ╭❤~@&再见萤火虫&【04-前端技术】


    对学习Java感兴趣的同学欢迎加入QQ学习交流群:1126298731

    有问题欢迎提问,大家一起在学习Java的路上打怪升级!(o゜▽゜)o☆[BINGO!]

    展开全文
  • 输入一张特定格式的答题卡图片(答题卡中题目数量和选项个数是固定的),能够输出此答题卡中答案的准确率。运行效果如下: 输入一张答题卡图片 输出结果 对于这类任务,先整理一下图像处理的思路。 我们输入的是...

    答题卡识别

    项目理论和源码来自唐宇迪opencv项目实战

    记一篇python-opencv 完成答题卡识别 项目的学习笔记

    输入一张特定格式的答题卡图片(答题卡中题目数量和选项个数是固定的),能够输出此答题卡中答案的准确率。运行效果如下:
    输入一张答题卡图片
    在这里插入图片描述
    输出结果
    在这里插入图片描述
    对于这类任务,先整理一下图像处理的思路。
    我们输入的是一张答题卡的拍摄图片,而我们要处理的是这张答题卡的内容,需要用到透视变换将答题卡的内容单独拿出来;
    提取答题卡中填涂区域的轮廓,并进行二值化处理,利用掩模与二值化后的答题卡进行对比处理。(灰度化处理二值化边缘检测
    在一个两层循环中遍历每一道题目的每一个选项,得出准确率。最后将准确率显示在图片上。


    代码部分

    image = cv2.imread(args["image"])
    contours_img = image.copy()
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    cv_show('GaussianBlured',blurred)
    edged = cv2.Canny(blurred, 75, 200)
    cv_show('Canny',edged)
    cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,
    	cv2.CHAIN_APPROX_SIMPLE)[1]
    cv2.drawContours(contours_img, cnts, -1, (0, 0, 255), 3)
    cv_show('contours_img',contours_img)
    

    读取图片,防止原图片被更改,通常复制该图片
    把图片(转化为灰度图、高斯滤波滤除噪声、Canny边缘检测),检测轮廓并在图片上绘制轮廓。

    • Canny边缘检测

    Canny边缘检测的具体步骤:

    1. 使用高斯滤波器平滑图像,去除噪声。
      高斯滤波
      https://blog.csdn.net/keith_bb/article/details/54412493

    高斯滤波是一种线性平滑滤波,对于滤除图片中的高斯噪声效果显著
    滤波是对整张图像进行加权平均的过程。高斯滤波的具体操作是用一个模板扫描图像中的每一个像素点,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
    高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。

    1. 计算图片中每个像素点的强度和方向
    2. 非极大值抑制(NMS)消除边缘检测带来的杂散相应

    比较当前点和周围点之间的梯度幅值大小,如果该店的梯度幅值最大,则保留该点位边界点。否则将该点抑制掉

    1. 用双阈值检测来确定真实的和潜在的边缘

    对于函数中的两个参数,如果梯度值>maxval,则按边界处理;
    如果minval<梯度值<maxval,且该点与边界点连接,则将该点视为边界点。否则舍弃该点;
    如果梯度值<minval,则判断该点不是边界点

    1. 通过抑制孤立的弱边缘完成边缘检测

    Canny边缘检测结果如图所示:
    在这里插入图片描述
    接着检测图片中的轮廓
    cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]
    检测外轮廓,参数cv2.CHAIN_APPROX_SIMPLE表示图像轮廓的逼近方式。
    该函数的返回值是存放轮廓的list结构。

    if len(cnts) > 0:
    	cnts = sorted(cnts, key=cv2.contourArea, reverse=True)
    	for c in cnts:
    		peri = cv2.arcLength(c, True)
    		approx = cv2.approxPolyDP(c, 0.02 * peri, True)
    		print('approx', approx)
    		if len(approx) == 4:
    			docCnt = approx
    			break
    

    遍历所有检测到的轮廓,根据轮廓面积大小进行排序。求近似轮廓,精度为轮廓周长的2%。取函数cv2.approxPolyDP的前四个返回值,这四个点围成了图片中最大的轮廓。
    返回approx结果为:
    在这里插入图片描述

    • 透视变换

    def four_point_transform(image, pts):
    	rect = order_points(pts)
    	(bl, br, tr, tl) = rect
    
    	widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))
    	widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))
    	maxWidth = max(int(widthA), int(widthB))
    
    	heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))
    	heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))
    	maxHeight = max(int(heightA), int(heightB))
    
    	dst = np.array([
    		[0, 0],
    		[maxWidth - 1, 0],
    		[maxWidth - 1, maxHeight - 1],
    		[0, maxHeight - 1]], dtype="float32")
    
    	M = cv2.getPerspectiveTransform(rect, dst)
    	warped = cv2.warpPerspective(image, M, (maxWidth, maxHeight))
    
    	return warped
    

    函数four_point_transform的作用是输入四个轮廓点的坐标,将原图像中轮廓背的图像映射到另一个图片中。
    将输入的这四个轮廓点区分出(左上、左下、右下、右上),答题卡的外轮廓近似为矩形,所以根据这四个点的坐标计算出矩形的宽和高,根据宽和高的长度计算出透视变换后答题卡在新的图片中的坐标。
    函数M = cv2.getPerspectiveTransform(rect, dst)计算的是从原图像的坐标映射到新的图像的变换矩阵。
    最后返回透视变换后的图像。
    如何根据坐标来区分四个轮廓点在矩形上的位置
    分别计算四个点横、纵坐标的和、差

    最大值 右上角 右下角
    最小值 左下角 左上角

    灰度图透视变换的结果如图所示:
    在这里插入图片描述
    在透视变换的基础上对图像进行二值化处理:
    thresh = cv2.threshold(warped, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
    对于双峰的情况采用大津法(一种自适应的二值化处理方法),不需要指定二值化的阈值(不代表阈值为0)
    二值化的结果如图所示:
    在这里插入图片描述
    下一步进行轮廓检测,目的是滤除其他图像的干扰,只保留填涂的圆圈部分的图形。由于填涂部分的圆圈大小相同,根据外接矩形的长宽比滤除其他干扰图形。滤除后的结果如图所示:
    在这里插入图片描述
    接着绘制每一个填涂圆圈的掩模,由于填涂后的答题卡在二值图像中>0的像素点较多,而且掩模中的圆圈部分的像素值为255,其余部分的像素值为0,将掩模与原图像进行“与”操作,得到每一个圆圈的“与”运算结果,判断该选项的圆圈是否被填涂了。
    代码如下:

    for (q, i) in enumerate(np.arange(0, len(questionCnts), 5)):
    
    	cnts = sort_contours(questionCnts[i:i + 5])[0]
    	print('cnts', cnts)
    	bubbled = None
    	for (j, c) in enumerate(cnts):
    
    		mask = np.zeros(thresh.shape, dtype="uint8")
    		cv2.drawContours(mask, [c], -1, 255, -1) #-1表示填充
    		cv_show('mask',mask)
    
    		mask = cv2.bitwise_and(thresh, thresh, mask=mask)
    
    		total = cv2.countNonZero(mask)
    
    
    		if bubbled is None or total > bubbled[0]:
    			bubbled = (total, j)
    
    
    	color = (0, 0, 255)
    	k = ANSWER_KEY[q]
    
    	if k == bubbled[1]:
    		color = (0, 255, 0)
    		correct += 1
    
    	cv2.drawContours(warped, [cnts[k]], -1, color, 3)
    

    定义了一个2层的循环,外层循环便是遍历不同的行,内层循环表示同一行中不同的列。

    由于事先定义了一个字典,存放了正确答案

    ANSWER_KEY = {0: 1, 1: 4, 2: 0, 3: 3, 4: 1}
    

    将掩模“与”运算的结果与答案进行对照,得到答题卡的得分,并计算出准确率。
    最后输出结果,将准确率写在最后的输出图片上。


    至此答题卡识别项目完成

    完整代码如下

    # 导入工具包
    import numpy as np
    import argparse
    import imutils
    import cv2
    
    # 设置参数
    ap = argparse.ArgumentParser()
    ap.add_argument("-i", "--image", required=True,
    	help="path to the input image")
    args = vars(ap.parse_args())
    
    # 正确答案
    # 字典:键值对,第几个位置对应正确答案对应的索引值
    ANSWER_KEY = {0: 1, 1: 4, 2: 0, 3: 3, 4: 1}
    
    # 提取轮廓
    
    
    def order_points(pts):
    	# 一共4个坐标点,定义一个4行两列的元素为0的矩阵。
    	rect = np.zeros((4, 2), dtype="float32")
    	# 找出图像中四个顶点的坐标。
    	# 按顺序找到对应坐标0123分别是 左下、右下、右上、左上
    	# 计算左上,右下
    	# 现在pts中是4个向量,axis为1表示将矩阵的行向量相加。
    	# [[0, 1],
    	#  [1, 1],
    	#  [1, 0],
    	#  [0, 0]]
    	s = pts.sum(axis=1)
    	print('s', s)
    	# rect[0]表示左下, rect[2]表示右上
    	rect[0] = pts[np.argmin(s)]
    	rect[2] = pts[np.argmax(s)]
    	print('rect[0][2]', rect[0], rect[2])
    	# 计算右下和左上
    	diff = np.diff(pts, axis=1)
    	rect[1] = pts[np.argmin(diff)]
    	rect[3] = pts[np.argmax(diff)]
    	print('rect[1][3]', rect[1], rect[3])
    	return rect
    # 执行完order_point操作后,pts中存放的是按照左下、右下、右上、左上顺序排列的四个顶点的坐标
    
    
    def four_point_transform(image, pts):
    	# 获取输入坐标点
    	rect = order_points(pts)
    	(bl, br, tr, tl) = rect
    
    	# 计算输入的w和h值
    	widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))
    	widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))
    	maxWidth = max(int(widthA), int(widthB))
    
    	heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))
    	heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))
    	maxHeight = max(int(heightA), int(heightB))
    
    	# 变换后对应坐标位置
    	dst = np.array([
    		[0, 0],
    		[maxWidth - 1, 0],
    		[maxWidth - 1, maxHeight - 1],
    		[0, maxHeight - 1]], dtype="float32")
    
    	# 计算变换矩阵
    	# 透视变换
    	M = cv2.getPerspectiveTransform(rect, dst)
    	warped = cv2.warpPerspective(image, M, (maxWidth, maxHeight))
    
    	# 返回变换后结果
    	return warped
    
    # 对检测到的轮廓进行排序
    
    
    def sort_contours(cnts, method="left-to-right"):
    	reverse = False
    	i = 0
    	if method == "right-to-left" or method == "bottom-to-top":
    		reverse = True
    	if method == "top-to-bottom" or method == "bottom-to-top":
    		i = 1
    	boundingBoxes = [cv2.boundingRect(c) for c in cnts]
    	(cnts, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes),
    								key=lambda b: b[1][i], reverse=reverse))
    	return cnts, boundingBoxes
    
    
    def cv_show(name,img):
    	cv2.imshow(name, img)
    	cv2.waitKey(0)
    	cv2.destroyAllWindows()
    
    # 预处理
    
    
    image = cv2.imread(args["image"])
    contours_img = image.copy()
    # 彩色图片转化为灰度图
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 高斯滤波去噪
    blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    cv_show('GaussianBlured',blurred)
    # Canny边缘检测
    edged = cv2.Canny(blurred, 75, 200)
    cv_show('Canny',edged)
    
    # 用边缘检测的结果进行轮廓检测
    # cv2.RETR_EXTERNAL表示只检测最外层的轮廓
    # cv2.findContours函数有三个返回值:
    # binary(二值图像)、contours(List存放检测到的所有轮廓)、hierarchy(表示层级信息)
    # 查找的轮廓保存在cnts中
    cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,
    	cv2.CHAIN_APPROX_SIMPLE)[1]
    # 画出轮廓
    # cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None)
    # 第一个参数是指明在哪幅图像上绘制轮廓;image为三通道才能显示轮廓
    # 第二个参数是轮廓本身,在Python中是一个list;
    # 第三个参数指定绘制轮廓list中的哪条轮廓,如果是-1,则绘制其中的所有轮廓。后面的参数很简单。其中thickness表明轮廓线的宽度,如果是-1(cv2.FILLED),则为填充模式。
    
    cv2.drawContours(contours_img, cnts, -1, (0, 0, 255), 3)
    cv_show('contours_img',contours_img)
    docCnt = None
    
    # 确保检测到了轮廓
    if len(cnts) > 0:
    	# 根据轮廓大小进行排序
    	cnts = sorted(cnts, key=cv2.contourArea, reverse=True)
    
    	# 遍历每一个轮廓
    	for c in cnts:
    		# 近似
    		# cv2.arcLength函数返回值是轮廓的周长,第二个参数表示轮廓是否闭合
    		peri = cv2.arcLength(c, True)
    		# cv2.approxPolyDP函数对轮廓进行近似处理,在一定精度范文诶,将弧用弦来近似代替。
    		# 通常精度用周长的百分比来计算
    		# 返回值是围成最大轮廓的点的坐标
    		approx = cv2.approxPolyDP(c, 0.02 * peri, True)
    		print('approx', approx)
    		# 准备做透视变换
    		if len(approx) == 4:
    			docCnt = approx
    			break
    
    # 执行透视变换
    
    warped = four_point_transform(gray, docCnt.reshape(4, 2))
    cv_show('the result of four point transform',warped)
    # Otsu's 阈值处理
    # 大津法进行图像二值化处理,对于双峰的情况能够自动识别出阈值
    # 使用自适应的二值化处理
    thresh = cv2.threshold(warped, 0, 255,
    	cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1] 
    cv_show('thresh',thresh)
    thresh_Contours = thresh.copy()
    # 找到每一个圆圈轮廓
    cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
    	cv2.CHAIN_APPROX_SIMPLE)[1]
    cv2.drawContours(thresh_Contours, cnts, -1, (0, 0, 255), 3)
    cv_show('thresh_Contours',thresh_Contours)
    questionCnts = []
    
    # 遍历
    for c in cnts:
    	# 遍历轮廓,计算轮廓的外接矩形,满足固定比例则看做答题的圆圈位置。
    	(x, y, w, h) = cv2.boundingRect(c)
    	ar = w / float(h)
    	# 根据实际情况指定标准
    	# 宽度和高度都大于20,而且宽高比在0.9和1.1之间。
    	# 则判定该轮廓为答题的圆圈
    	if w >= 20 and h >= 20 and ar >= 0.9 and ar <= 1.1:
    		questionCnts.append(c)
    
    # 按照从左到右从上到下进行排序
    questionCnts = sort_contours(questionCnts,
    	method="top-to-bottom")[0]
    # 初始化的得分为0
    correct = 0
    
    # 每排有5个选项
    # 从0到len(questionCnts)
    # 枚举,分别取0, 5, 10,……
    # 遍历不同的题目
    for (q, i) in enumerate(np.arange(0, len(questionCnts), 5)):
    	# 排序
    	cnts = sort_contours(questionCnts[i:i + 5])[0]
    	print('cnts', cnts)
    	bubbled = None
    
    	# 遍历每一个结果
    	# 对于统一体的不同选项
    	for (j, c) in enumerate(cnts):
    		# 使用mask来判断结果
    		# 制作每一个选项的圆圈mask,只有选项的位置为255,其他位置为0。
    		mask = np.zeros(thresh.shape, dtype="uint8")
    		cv2.drawContours(mask, [c], -1, 255, -1) #-1表示填充
    		cv_show('mask',mask)
    		# 通过计算非零点数量来算是否选择
    		# 将mask于二值化的图像进行与运算
    		# 利用掩膜(mask)进行“与”操作,
    		# 即掩膜图像白色区域是对需要处理图像像素的保留,
    		# 黑色区域是对需要处理图像像素的剔除,
    		# 其余按位操作原理类似只是效果不同而已。
    		# 本实例中依次保留每一个选项的圆圈区域。
    		mask = cv2.bitwise_and(thresh, thresh, mask=mask)
    		# cv2.countNonZero函数的作用是统计非零像素点。
    		# 也就是判断这个选项涂没涂上。
    		total = cv2.countNonZero(mask)
    
    		# 通过阈值判断
    		if bubbled is None or total > bubbled[0]:
    			bubbled = (total, j)
    
    	# 对比正确答案
    	color = (0, 0, 255)
    	k = ANSWER_KEY[q]
    
    	# 判断正确
    	if k == bubbled[1]:
    		color = (0, 255, 0)
    		correct += 1
    
    	# 绘图
    	cv2.drawContours(warped, [cnts[k]], -1, color, 3)
    
    # 计算得分
    score = (correct / 5.0) * 100
    print("[INFO] score: {:.2f}%".format(score))
    # 把得分以文本的形式显示在图片上。
    cv2.putText(warped, "{:.2f}%".format(score), (10, 30),
    	cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2)
    cv2.imshow("Original", image)
    cv2.imshow("Exam", warped)
    cv2.waitKey(0)
    
    
    展开全文
  • 关于Hadoop下运行MapReduce任务卡在Map0%和Reduce0%的解决办法 检查核心配置 mapred-site.xml文件 检查以下配置信息,如果没有该信息,则添加上去 ![在这里插入图片描述]...

    关于Hadoop下运行MapReduce任务卡在Map0%和Reduce0%的解决办法

    检查核心配置 mapred-site.xml文件

    检查以下配置信息,如果没有该信息,则添加上去
    在这里插入图片描述
    放个对比图吧(这里的端口不一定要和我的一样,只要不冲突的都可以)
    在这里插入图片描述
    下面是参数配置信息

    // 2020.5.26 Jay-L
    <property>
           <name>mapreduce.framework.name</name>
           <value>yarn</value>
    </property>
    <property>
          <name>mapreduce.job.tracker</name>
          <value>hdfs://IP:端口</value>
          <final>true</final>
     </property>
    

    我改完重启就可以正常使用了。

    另外一种可能是因为在配置文件yarn-site.xml中添加了自己配置的内存信息,只需要把它的内存信息注释掉(把内存配置全部为默认值)重启之后就可以运行了

    在这里插入图片描述

    展开全文
  • 这是别人的图片,据楼主排查解决是因为hosts配置问题???我想知道hosts没配置好,Hadoop是怎么撑到MR的… 现象:各种无法运行、启动 解决办法: 1、修改日志级别 export HADOOP_ROOT_LOGGER=DEBUG,console 查看下...
  • 图片卡在桌面了

    2019-05-23 10:58:57
    打开任务管理器将进程“explorer”结束,这时桌面图标和任务栏全无。在打开任务管理器(按下“Ctrl+Alt+Del”组合键即可打开),点击“文件”→“新建任务”,在打开的“创建新任务”对话框中输入“explorer”,单击...
  • 在使用 python 协程下载图片中,最终协程的任务在 97 一直循环,不知道哪里出了问题,有大佬知道什么情况吗,困扰我好久 下图是我运行结果,附上代码。 ![图片说明]...
  • 在spring会议中工作认领 PM:侯熙磊: 1、用c#限制输入文字的排版和格式。-----4h(11-15号-17号) 2、用c#编写输入图片的代码。-----3h(11-18号) ...
  • 任务会一直着重启? 主要错误日志如下: 图片" src="https://img-blog.csdnimg.cn/img_convert/0498e4226c301280a3d203cd46dc7103.png" /></p> 抱歉, grafana没有加实例的详情数据流入流出监控...
  • Android从SD读取图片并显示

    千次阅读 2014-02-20 16:45:14
    从SD读取图片转为预览图(点阵图,类似马赛克),2.保存当前预览图到特定文件夹,保存为一个txt,txt里存的是像素矩阵。3.从那个特定文件夹里读取像素矩阵,显示为预览图。 今天一下午和一晚上都在纠结第3个任务...
  • /** * 下载闪屏页的图片 */ private void loadFirstImage(final String url) { /** * 在子线程中开启下载图片任务 */ new Thread(new Runnable() { @Override
  • 图片比较 (有“用户选项”) ...选中快速用户切换并应用,在调出windows 任务管理器界面,“用户”选项就会出现,同样取消显示“用户”选项,只需撤选该选项 转载于:https://blog.51cto.com/yuntao...
  • 1、使用了线程池来管理下载任务 2、使用LruCache来缓存图片 3、使用手机来缓存图片 4、GridView滑动的时候取消下载任务,静止的时候进行下载,GridView滑动更加的流畅 5、降低了代码的耦合性,结构更加的清晰,便于...
  • 从SD读取图片转为预览图(点阵图,类似马赛克),2.保存当前预览图到特定文件夹,保存为一个txt,txt里存的是像素矩阵。3.从那个特定文件夹里读取像素矩阵,显示为预览图。今天一下午和一晚上都在纠结第3个任务。...
  • 技术概述:1.使用了线程池来管理下载任务 2.使用LruCache来缓存图片 3.使用手机来缓存图片 ...FileUtils 文件操作的工具类,提供保存图片,获取图片,判断图片是否存在,删除图片的一些方法,这个类比较
  • [图片说明](https://img-ask.csdn.net/upload/201903/07/1551952935_380051.jpg) 在yarn-root-resourcemanager-hadoop01.log 中的信息: ![图片说明]...
  • 文章目录前言一、pandas是什么?二、使用步骤1....示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import
  • 懂了任务管理器,也算懂了电脑吧​mp.weixin.qq.com本文760字左右,又臭又长,要两分钟左右哦搓链接看原文,这里懒得放图片很多人,电脑用着用着就了。你知道吗,那是因为你打开的程序太多了,没有关闭,才导致...
  • 闪存-源码

    2021-02-14 04:22:43
    通常,抽认在一侧显示提示(任务图片),而在另一侧显示正确答案。 我通过以下操作实施了该项目: 添加(您可以将flash-card添加到内存;这意味着添加term和definition ,例如France-Paris ) 删除(从内存中...
  • 知识点:js异步实现EventLoop、消息队列宏... 但倘若只有同步模式,遇到耗时操作,页面便会阻塞,就像接口请求不到数据,或者图片未加载完成,页面就住一直等待。这样显然不现实也不实用。所以异步模式应运而生...
  • 机器学习的主要任务

    千次阅读 2018-03-09 02:26:04
    给出一张手写数字图片判断0,1,2...9分类任务细分: 二分类 比如说猫和狗判断 是垃圾右键和不是垃圾邮件, 银行判断发给用户信用有风险还是没风险(风险高低) 判断病患良性肿瘤还是恶性肿瘤 判断股票涨还是跌...
  • 1.2 机器学习的主要任务 机器学习的任务主要有两类:分类和回归。 (1).分类任务: 顾名思义,比如说对于一张图片,让机器分辨它是猫还是狗;给出一张手写识别的图片,让机器分辨是哪个数字等。 机器学习的算法要...
  • 任务使用项目2任务4中的设计界面结果实现使用高清摄像头拍照后通过WebView控件显示到移动终端如果用户认为特殊情境的数据需要以图片的形式保存在移动设备中可以点击拍照按钮把实时图片保存在SD中 ? 辽宁轻工职业...
  • 利用异步任务来完成耗时的存储扫描工作 1、创建安卓应用(music_v4) 2、将MP3音频文件放到存储指定位置 3、将图片素材拷贝到Drawable目录 4、在项目清单文件里授权读外置存储 在项目清单文件里个音乐播放器...
  • 利用异步任务来完成耗时的存储扫描工作 1、创建安卓应用(music_v4) 2、将MP3音频文件放到存储指定位置 3、将图片素材拷贝到Drawable目录 4、在项目清单文件里授权读外置存储 在项目清单文件里个音乐播放器...
  • 信用数字识别

    2019-08-15 20:56:17
    刚刚学了信用数字识别的案例,在此记录一下。。用的是模板匹配的方法 首先是对模板的处理,这是所用的模板,主要的任务是将这是十个数字进行分割标号,即第一个位置标识为0,第二个位置标识为2… 先对该模板图片...
  • 这就需要监听每一个下载任务的进度并不断的刷新界面的进度,但是因为我这个进度条界面会有很多的图片,然后每个下载任务都会发消息给界面处理,造成界面刷新非常的频繁,导致图片不能显示,并且会让界面非常。...
  • Android L后应用的多任务是这样子的,那么应用在这里显示的样式如何修改? 目前我知道卡片顶部背景颜色就是Material Design主题的colorPrimary,而我的应用的主色配黑字很难看,我想要修改这里标题的颜色。 ...
  • 服务器身份证识别银行识别系统的网络结构由Web Service和其相关网站接收客户端上传的需要识别的证件图片,客户端可以是PC的客户端程序,可以是PC的浏览器、手机或其他便携式设备。当Web Service接收到图片后将其...
  • MX150移动版显卡能高效地完成一些任务,例如使用Adobe家的Photoshop、Illustrator、Lightroom进行图片编辑,要比核显们快多了,在复杂程度更高的视频编辑上,MX150可以提供四倍于集显的性能。现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 438
精华内容 175
关键字:

任务卡图片