2023软工K班个人编程任务

吴鑫雄102101518 2023-09-14 12:19:11

(1.1)在Github仓库中新建一个学号为名的文件夹,同时在博客正文首行给出作业Github链接。(2')

我的作业链接-->https://github.com/fzuwxx/depot

一、PSP表格

(2.1)在开始实现程序之前,在附录提供的PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间。(3')
(2.2)在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间。(3')

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3025
· Estimate· 估计这个任务需要多少时间570655
Development开发500550
· Analysis· 需求分析 (包括学习新技术)120130
· Design Spec· 生成设计文档3020
· Design Review· 设计复审157
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)158
· Design· 具体设计6045
· Coding· 具体编码180290
· Code Review· 代码复审3020
· Test· 测试(自我测试,修改代码,提交修改)6075
Reporting报告6060
· Test Repor· 测试报告4540
· Size Measurement· 计算工作量158
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划6060
· 合计600680

二、任务要求的实现

(3.1)项目设计与技术栈。从阅读完题目到完成作业,这一次的任务被你拆分成了几个环节?你分别通过什么渠道、使用什么方式方法完成了各个环节?列出你完成本次任务所使用的技术栈。(5')

本次任务被我分为6个环节,分别是:任务规划、代码结构、代码编写、代码测试、代码改进以及总结报告。
任务规划:通过题目所提供的邹欣老师的博客了解了什么是PSP,从而根据PSP表格将任务进行了细分与时间规划,让我能够高效且迅速的完成任务。
代码结构:通过浏览博客,大致了解了爬取B站视频弹幕的步骤,从而对我的代码结构进行了划分,分别为获取视频bv号、获取视频cid号、爬取弹幕文件、写入excel、绘制词云图、进行数量统计。这样能够使得我的代码模块化,逻辑清晰更加易于实现。
代码编写:本次作业中我采用的是Python语言,通过csdn中爬虫的相关博客学习到了爬虫的基本流程和代码实现,在复现的基础上加入自己的想法,让代码变的更加完整、优美和易读。
代码测试:代码编写完成后,先是通过SonarLint进行了Code Quality Analysis;再通过pycharm专业版自带的Profile对代码进行性能的分析,从而发现代码存在的问题和可提升空间。
代码改进:通过上网查询相关资料,逐步的改进代码使其通过SonarLint的Code Quality Analysis;再通过多进程实现代码性能的提升和运行时间的缩短。最终SonarLint的Code Quality Analysis分析结果如下:

img

总结报告:在完成上述环节之后,我拿出了一个小时的时间进行这次作业的总结,然后再拿出一个小时的时间进行了博客的撰写,加深对这次作业的理解。

技术栈:requests库、正则表达式、文件的读写、图形的绘画、多进程开发、浏览器开发者工具。

(3.2)爬虫与数据处理。说明业务逻辑,简述代码的设计过程(例如可介绍有几个类,几个函数,他们之间的关系),并对关键的函数或算法进行说明。(20')

业务逻辑:通过调用Bilibili的API,搜索指定关键词下的视频,并获取这些视频的弹幕数据。然后将弹幕数据保存到CSV文件中,并对弹幕进行统计,输出出现次数最多的前20个弹幕。此外,还使用WordCloud库生成弹幕的词云图。最后,计算程序运行时间并输出相关信息。

设计思路:通过调用Bilibili的搜索API获取与“日本核污染水排海”关键词相关的前300个视频信息。然后,从视频信息中获取每个视频的bvid号码,并通过bvid号码获取视频的cid。接下来,使用cid获取弹幕数据,并将弹幕数据保存到CSV文件中。同时,对弹幕数据进行统计分析,包括计算每个弹幕出现的次数,并将结果输出为CSV文件。最后,使用jieba库对弹幕数据进行中文分词处理,生成词云图并保存为图片文件。为了提高爬取速度,使用了多进程的方式进行并发爬取。每个进程负责爬取一页视频(20个)的弹幕数据.

关键函数说明

(一)、该函数通过调用搜索API获取“日本核污染水排海”相关的第page页第pos个视频的弹幕数据。


def get_bvid(page, pos):
    """
    通过搜索api“https://api.bilibili.com/x/web-interface/search/all/v2?page=&keyword=”获取前300个视频的bvid,
    其中page为1-15,keyword为“日本核污染水排海”
    """
    # 构造搜索视频的API请求URL
    _url = 'https://api.bilibili.com/x/web-interface/search/all/v2?page=' + str(page+1) + '&keyword=日本核污染水排海'

    # 构造请求头,包括用户代理信息和cookie
    _headers = {
        '''......'''
        }
    res = requests.get(url=_url, headers=_headers).text     # 发起GET请求,获取响应结果的文本形
    json_dict = json.loads(res)     # 将获取的响应结果解析为Python字典对象
    return json_dict["data"]["result"][11]["data"][pos]["bvid"]     # 返回视频的bvid号

(二)、根据传入的bvid号,发送API请求并解析响应结果,从中提取出cid,并作为函数返回值。


def get_cid(bvid):
    # 构造API请求URL
    url = 'https://api.bilibili.com/x/player/pagelist?bvid=' + str(bvid) + '&jsonp=jsonp'
    res = requests.get(url).text        # 发起GET请求,获取响应结果的文本形式
    json_dict = json.loads(res)     # 将获取的网页json编码字符串转换为Python对象
    print(json_dict)        # 打印整个转换后的结果,用于调试
    return json_dict["data"][0]["cid"]      # 返回获取到的视频信息的cid值

(三)、通过传入的cid,发送API请求并对响应结果进行编码处理,使用正则表达式提取数据,最后将数据作为函数返回值。


def get_data(cid):
    try:
        # 构造API请求URL
        final_url = "https://api.bilibili.com/x/v1/dm/list.so?oid=" + str(cid)
        final_res = requests.get(final_url)     # 发起GET请求获取数据
        final_res.encoding = 'utf-8'        # 设置编码为utf-8
        final_res = final_res.text          # 获取文本形式
        pattern = re.compile('<d.*?>(.*?)</d>')     # 使用正则表达式提取数据
        data = pattern.findall(final_res)
        return data     # 返回数据

    # 异常处理
    except Exception as e:
        print("执行get_data失败:", e)       # 打印错误信息

(四)、使用追加模式以UTF-8编码将数据写入CSV文件。


def save_to_file(data):
    try:
        # 打开 CSV 文件,以追加模式写入数据
        with open('danmu_data.csv', 'a', newline='', encoding='utf-8') as file:
            writer = csv.writer(file)       # 创建 CSV writer 对象
            # 遍历数据列表,逐行写入 CSV 文件
            for d in data:
                writer.writerow([d])

    # 异常处理
    except Exception as e:
        print("执行保存文件报错:", e)       # 打印错误信息

(五)、通过读取CSV文件中的弹幕数据,使用matplotlib库绘制水平条形图可视化数量前20的弹幕以及出现次数。


def print_danmu():
    try:
        # 读取csv文件,从第一列开始读取数据
        all_danmu = pd.read_csv(danmu_file, header=None, encoding='utf-8')
        counter = all_danmu.stack().value_counts()      # 统计每个弹幕出现的次数
        top_20 = counter.head(20).reset_index()     # 转换为DataFrame并重置索引
        top_20.columns = ['弹幕', '出现次数']     # 重命名列名
        print(top_20)
        counter.to_csv('danmu_counter.csv')     # 统计弹幕出现次数并存入csv
    # 异常处理
    except Exception as e:
        print("执行输出弹幕报错:", e)       # 打印错误信息

单元测试:

通过Python自带的unittest库对上述若干个关键函数进行了单元测试,测试结果如下:

img

实现代码如下:


import unittest
from main_third import get_cid, get_data, get_bvid

bvid = ["BV1Ym4y1K7rg", "BV1Ap4y1E718", "BV1Ym4y1K7rg", "BV1M8411X7DP", "BV1vN411i73M", "BV1NG411d7H5"]
cid = ["1264099708", "1245630731", "1264099708", "1245291456", "1245068396", "1250757149"]


class Mytest(unittest.TestCase):

    def test_get_bvid(self):
        print("开始测试get_bvid函数")     # 打印测试开始的提示信息

        # 循环6次进行测试
        for i in range(6):
            bvid_data = get_bvid(i, 0)      # 调用get_bvid函数并获取返回值
            self.assertIsNotNone(bvid_data)     # 断言返回值不为None

    def test_get_cid(self):
        print("开始测试get_cid函数")      # 打印测试开始的提示信息
        cid_num = []        # 创建一个空列表来存储cid_num
        # 遍历bvid列表中的每个元素
        for i in bvid:
            cid_num.append(str(get_cid(i)))     # 调用get_cid函数并将返回值转换为字符串,然后添加到cid_num列表中
        self.assertEqual(cid, cid_num)      # 使用断言来判断cid和cid_num是否相等

    def test_get_data(self):
        print("开始测试get_data函数")     # 打印测试开始的提示信息
        # 遍历cid列表中的每个元素
        for i in cid:
            data = get_data(i)      # 调用get_data函数并获取返回值
            self.assertIsNotNone(data)      # 使用断言来判断data是否为None


if __name__ == '__main__':
    unittest.main()
    

(3.3)数据统计接口部分的性能改进。记录在数据统计接口的性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(例如可通过VS /JProfiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。(6')

数据统计接口部分的性能分析我采用的是pycharm专业版自带的Profile进行图形化分析。分析图如下:

img

通过分析图可知,程序在获取bvid号、cid号以及弹幕数据时消耗时间较高,这主要是由于cpu采用顺序执行(即需要爬取完一个视频之后才能继续爬取),因此我改进的思路是采用多进程并发执行,采用15个进程分别爬取每页中的视频弹幕,从而提升运行时间。
具体实现代码如下:


    pool = multiprocessing.Pool(15)     # 创建一个进程池,最大进程数为15
    # 循环创建15个进程,并指派给进程池执行
    for i in range(15):
        pool.apply_async(main(i), args=(i, danmu_file))     # main(i)表示爬取第i页弹幕数据
    pool.close()        # 关闭进程池,表示不再接受新的任务
    pool.join()     # 等待所有进程任务完成
    print("All workers finished")

改进前运行时间:

img

改进后运行时间:

img

由图可知,在采用多进程并发执行后程序运行时间明显提升,提升近100s。

消耗最大的函数:get_bvid(page, pos)

(3.4)数据结论的可靠性。介绍结论的内容,以及通过什么数据以及何种判断方式得出此结论(6')

结论:弹幕数据表明了B站用户对于日本核污染水排海是坚决抵制的,对保护海洋和地球的呼声非常高,十分关注排放污水的问题。

这个结论是通过弹幕出现次数前20的数据得出的,这些数据出现最多的是“保护海洋”、“保护地球”、“反对排海”,等,数据展示如下:

img

(3.5)数据可视化界面的展示。在博客中介绍数据可视化界面的组件和设计的思路。(15')

数据可视化展示:

img

使用jieba库对弹幕数据进行分词,然后根据需求自定义词云图的背景,接着利用wordcloud库来绘制词云图。以下为具体实现代码:

def ciyuntu():
    try:
        df = pd.read_csv(danmu_file)     # 使用 pandas 读取 CSV 文件
        txt = ''.join(df.astype(str).values.flatten())      # 将DataFrame转换为字符串
        txt_list = jieba.lcut(txt)      # 使用jieba进行中文分词
        string = ' '.join(txt_list)     # 将分词结果拼接为字符串
        mask_image = "Background2.jpg"      # 读取自定义的图片作为词云图背景
        mask = np.array(Image.open(mask_image))
        # 创建词云图对象
        wc = WordCloud(background_color='steelblue',
                       font_path='C:/Windows/Fonts/SIMLI.TTF',
                       width=1000, height=700,
                       contour_width=5, contour_color='white',
                       mask=mask)
        wc.generate(string)     # 生成词云图
        wc.to_file('wordcloud.png')     # 保存词云图

    # 异常处理
    except Exception as e:
        print("词云图制作报错:", e)        # 打印错误信息

三、心得体会

(4.1)在这儿写下你完成本次作业的心得体会,当然,如果你还有想表达的东西但在上面两个板块没有体现,也可以写在这儿~(10')

这次作业是我第一次自主完成的一个小项目。虽然辛苦但也很有意义。通过这次作业,我学到了很多以前不懂的知识。从最开始只是听说过爬虫,到最后真正实现爬虫,我学会了使用浏览器开发者工具、了解了B站的API,还掌握了相关库函数的用法和GitHub仓库的操作。正是通过逐步学习和实站,最终才能完成这次作业。在这过程中,我也遇到了许多问题,例如有关Excel文件导致的编码错误,以及API请求被拦截等,对此我耐心地查询了资料并成功解决了这些问题。

在这次作业中,我花费了大量时间编写代码,其中调试代码是最令人头痛的部分。当我完成了基础代码结构后,我天真的以为,似乎也就那样?但是,后来的调试属实把我困扰住了。改进代码、优化性能、美化可视化界面,以及如何使代码更易读等等看似简单却又不简单的问题陪伴了我许久。

通过这次作业,我还学会了代码的模块化和命名规范化,同时也认识到注释的重要性。拥有好的注释可以帮助我节省大量理解代码的时间。

总之,这次作业对我来说整体上是一次很好的体验。充实我的生活,丰富我的知识,提升我的编码能力,培养我的任务规划和博客撰写水平。受益匪浅!!!

img

四、附加题

1、世界主流观点:

我通过获取关于“日本核污染水排海的世界主流观点”的相关新闻,并将这些数据存入主流媒体观点.txt文件中,之后对该数据进行分词,并且输出了各媒体各国家的出现次数,以此来判断各国对此次事件的态度。(筛选时排除了我国,因为上述已经探讨过我国对这一事件的态度)

img

由图可知,韩国对此次事件反映最为激烈,因为两个国家之间距离很近,日本核污染水排海对他们国家的影响是非常大的。此外,在这些数据中涉及的国家和媒体很多,说明国际对此事件关注度也非常高,通过分析所获取的数据,能够得知世界各国对日本的这一做法持强烈反对态度,被世界所唾弃。在新闻中,几乎每个国家和媒体都有提及日本海产品的问题,明确禁止进口原厂地来自日本的海鲜,这也变相说明了日本海产品产业在未来必将没落。

2、有趣的数据:

我通过爬取B站中关键词为“鸡你太美”综合排序前300的视频弹幕,并将这些数据进行词云图可视化,从而来看看B站用户对于“鸡你太美”这一热梗的喜爱程度。可视化结果如下:

img

img

由此能够得出,B站用户对于“鸡你太美”这一热梗的使用程度很高,代表着大家对于这一热梗的喜爱。

...全文
293 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈佳俊112101129 2023-09-14
  • 打赏
  • 举报
回复

你干嘛哎呦

郑清桔102101531 2023-09-14
  • 打赏
  • 举报
回复 1

熊王出山

吴鑫雄102101518 2023-09-14
  • 举报
回复
@郑清桔102101531
刘炜祺102101513 2023-09-14
  • 打赏
  • 举报
回复 2

小xx写的太好了

吴鑫雄102101518 2023-09-14
  • 举报
回复
@刘炜祺102101513
南京工程学院 车辆工程系 本科毕业设计(论文)开题报告 题 目:基于数字图像处理的车牌定位和分割的研究 专 业: 自动化(车辆电子电气) 级: K车电气051 学 号:240061443 学生姓名: 朱培诚 指导教师: 顾新艳 讲 师 2010年3月 说 明 1.根据南京工程学院《毕业设计(论文)工作管理规定》,学生必须撰写《毕业设计(论文)开题报告》,由指导教师签署意见、教研室审查,系教学主任批准后实施。 2.开题报告是毕业设计(论文)答辩委员会对学生答辩资格审查的依据材料之一。学生应当在毕业设计(论文)工作前期内完成,开题报告不合格者不得参加答辩。 3.毕业设计开题报告各项内容要实事求是,逐条认真填写。其中的文字表达要明确、严谨,语言通顺,外来语要同时用原文和中文表达。第一次出现缩写词,须注出全称。 4.本报告中,由学生本人撰写的对课题和研究工作的分析及描述,应不少于2000字,没有经过整理归纳,缺乏个人见解仅仅从网上下载材料拼凑而成的开题报告按不合格论。 5.开题报告检查原则上在第2~4周完成,各系完成毕业设计开题检查后,应写一份开题情况总结报告。 本科毕业设计(论文)开题报告 学生姓名 朱培诚 学 号 240061443 专 业 自动化(车辆电子电气) 指导教师 顾新艳 职 称 讲 师 所在院系 车辆工程 课题来源 自拟课题 课题性质 工程技术研究 课题名称 基于数字图像处理的车牌定位和分割的研究 毕业设计的内容和意义 采用数字图像处理的原理和技术,进行车牌区域的准确定位和分割的研究,给出相应的算法,并通过VC编程实现。 毕业设计的具体内容: 1.熟悉和了解数字图像处理的原理和技术。 2.熟悉VC的编程和调试方法。 3.掌握数字图像处理的常规算法,尤其对图像的几何校正,边缘检测、区域定位和图像分割原理和算法要有深入的了解。 4. 完成车牌区域的准确定位和分割的设计方案,给出相应的算法,并通过编程实现。 本课题研究的意义: 在交通路口的违章监视,在高速公路收费入口,在涵洞、桥梁的入口以及在停车场和加油站的管理中,都需要对汽车牌照进行记录,而目前这些工作大多数都是由人工完成的,工作量很大,有时也难免会出现错误,如果改用智能系统进行自动的检测和识别,则会大大提高工作的速度,降低管理人员的工作量,提高服务的效率与质量。 在国内现有技术的基础之上进一步研究汽车牌照智能识别技术实现对实时采集到的汽车牌照图像进行分析,准确定位分割、提取出图像中的汽车牌照,并快速自动智能地识别出汽车牌照,还可以全面消除人为因素,因而对车牌识别技术的研究和应用系统开发具有重要的现实意义。 文 献 综 述 车牌自动识别系统从上一世纪80年代开始进入应用研究阶段、这个阶段的研究没有形成完整的系统体系,而是就某一具体的问题进行研究,通常采用简单的图像处理方法来解决。进入20世纪90年代后,随着计算机视觉的发展和计算机性能的提高,开始出现车牌识别的系统化研究。中国、美国、日本、法国等国家相继投入大量的人力、物力进行应用研究,随着社会的进一步发展,交通状况急需更快的发展来适应经济发展需要,各国更加关注对该系统的研究和应用。 文献[1]中阐述了智能交通系统的概念于1990年由美国智能交通学会(ITS America,当时名称为IVHS America)提出,并在世界各国大力推广。经过10多年的推广、试行和发展,智能交通系统目前己在世界上经济发达国家和经济较为发达国家的一些都市及高速公路系统中实施。实践证明,迄今为止,在美国、欧洲、亚洲都已有成功应用的范例。在国外,以色列Hi-Tech公司的See/Car System系列,香港Asia VisionTechnology公司的VECON产品,新加坡Optasia公司的VLPRS系列都是比较成熟的产品。虽然国外汽车牌照识别系统研究工作己有一定进展,但并不适合我国汽车牌照识别,其原因主要有我国车牌本身的特点决定的。我国车辆牌照缺乏统一的标准,根据不同汽车、车型、用途,规定了多种牌照格式(例如分为军车、警车、普通车等);悬挂位置随机,使得车牌识别过程中缺乏规律,使车牌定位分割、字符切分难度增加,准确性降低;车牌长期暴露易受污损,使得车牌区域模糊不清,易发生粘连、断裂等现象,在国外发达国家不允许由于环境、道路或人为因素造成汽车牌照污染严重的车辆上路行驶;我国车辆牌照由汉字、字母和数字组成,汉字的识别与字母和数字的识别有很大的不同,从而增加了识别的难度;其他国家汽车牌照的底色和字符颜色统一,只有对比度较强的两种颜色,而我国汽车牌照底色和字符有蓝/白、黑/红、黑/白等多种颜色组合;还有设置的营运牌照及张贴的广告信息,容易在车牌定位时产生干扰、误定位;车牌附近环境恶劣,往往有复杂的外形及安全杠等,不利于快速定位。 文献[2]中阐述了国内在90年代也开始了车牌识别的研究。由于中国车牌与国外的差异,加上车牌上汉字的存在。所以照搬国外的技术并不完全可行。对于国内的己应用系统中较成功的有浙江大学开发的基于web模式的LPR系统,中科院自动化研究所汉王科技公司开发的“汉王眼车牌识别系统”。另外,亚洲视觉科技有限公司、深圳吉通电子有限公司、中国信息产业部下属的中智交通电子有限公司等也有自己的产品,另外西安交通大学的图像处理和识别研究室、上海交通大学的计算机科学和工程系、清华大学人工智能国家重点实验室等也做过类似的研究。目前这些系统普遍存在的问题有:全天候识别率并不稳定, 文 献 综 述 特别是在夜间,或不良天气下识别率会降低到50%左右。还有许多其它问题需要解决,如国内许多论文谈及已实现的系统,都是在对近似理想条件下的汽车图像识别,对于车牌倾斜角度很大,车牌上字符模糊等情况提出的解决办法甚少。因此这样的系统即使识别率较高,也是建立在苛刻的特定的拍照环境下的。车牌自动识别系统产品中还存在一些不足,因而LPR技术的研究还有许多工作要做:从目前一些产品的性能指标可以看出,LPR系统的识别率和识别速度有待提高。研究高速、准确的定位与识别算法是当前的主要任务。上述产品中所使用的汽车图像均为灰度图像,而车牌本身是彩色物体,其底色和字符颜色为有限的几种,具有明显的颜色特征,车牌定位及字符的分割和识别没有用到颜色特征,采用彩色图像模式,目前的算法也很少涉及颜色特征,这在一定程度上影响了系统的性能。对于车牌彩色信息的利用有待于深入研究。另外目前只能处理单个车牌的汽车图像,对于一幅图像中多个车牌的识别则无能为力。这使得目前对多个车道进行监控时,需要多套摄像设备和车牌识别所需的计算机。如能深入研究一幅图像中多个车牌的识别问题,则可降低系统成本,提高工作效率。 所以从技术上对牌照自动识别系统进行进一步的改进完善是很有必要的。在软件上这主要要求提高字符识别率,同时提高软件的运行速度,提高实时性。相信随着研究的深入,LPR技术定会走向成熟。 文献[3]中阐述了目前国内外汽车牌照定位与识别技术主要采用软硬结合方式和软件方式两种技术方案。所谓软硬结合方式,就是首先通过专用的图像抓拍设备获取一幅适合于计算机识别汽车牌照的高质量图像,然后用软件和硬件结合的方式对所获取的专用图像进行牌照识别,它的最大优点就是识别率高,能够全天候工作。所谓软件方式,就是通过识别软件对普通的车辆图像进行牌照识别,它的最大优点就是成本低,通用性好。车牌自动识别系统主要有摄像装置、视频采集接口、计算机和辅助照明装置组成。计算机通过视频采集接口采集摄像装置摄入的视频图像,经处理和识别得到车牌号。在自然光较暗影响识别效果时,由辅助照明装置提供摄像光源。硬件部分包括车辆感应器,高速摄影装置等。车辆感应器的功能是感应车辆的到来,触发高速摄影装置在一定时间内动作抓拍图像。如在高速公路上,通常在收费处前方公路两侧埋置电磁感应圈,当车辆驶入感应区内,电磁感应圈产生电流,触发摄影头工作。除此之外,还有激光红外线车辆感应器等。埋置电磁感应线圈的缺点是工程量大,而激光红外线车辆感应器容易引起二次触发,即脱车引起的触发拍照。动态车牌图像捕捉系统主要由高分辨率摄像机,多光谱照明灯,图像处理器及控制器组成。它根据亮度变化,即可完成车牌的抓拍。相比而言,动态车牌图像捕捉 文 献 综 述 系统可以在白天和夜间等多种情况下工作,清楚捕捉高速运动中的汽车牌照图像,其效果不受日光,车灯等环境因素的影响。大量实验表明该方案是最理想的解决可靠性的方案。 图像输入通常由硬件完成,牌照定位与字符识别通常由软件完成。 文献[4][5][6]中阐述了日前存在的大量的车牌定位算法,选择一个好的定位算法成为车牌识别的一个关键问题。文中针对基于投影法的车牌定位算法。在VC平台上对车牌图像进行预处理后,再通过找点和标出矩形即可实现车牌的定位。通过大量的试验得出,本算法可以解决车牌定位时遇到的绝大部分问题,具有较高的研究价值和社会经济效益。 文献[7]中对智能交通系统的核心技术——汽车牌照识别技术进行了研究,在图像处理技术的基础上,着重研究了车牌区域定位技术,析了日前有代表性的车牌定位方法,介绍了利用粒子图像测速关联PIV(Particle Image Velocimeter)算法原理,提出了一种采用车牌字符笔画2个边缘互相关值最大的方法进行车牌定位的算法,准确而快速地检出了车牌区域,为后续车牌字符识别打下了很好的基础。 文献[8][9][10][11]中阐述了针对不同尺寸车牌图像的定位问题,提出了一种新的自适应车牌定位方法。该方法首先根据车牌区域的共性来提取图像的纵向边缘;然后由车牌区纵向纹理和边缘密度等特征,采用一系列步骤自适应去除干扰边缘来保留类车牌特征区域;最后通过横向形态学运算使类车牌区闭合,以有效地克服以往形态学结构元素难以随车牌尺寸变化自适应选取的问题;同时提出了根据场景实际情况,选用灰度调整和颜色来判别模块的观点。通过实际场景中大量车牌样本的验证结果表明,该算法不仅准确率较高,而且自适应性良好,具有实用价值。 参考文献: [1] 刘允才.智能交通国际发展概况和国内优先考虑的课题[J].公路,2001,11(11):26-34. [2] Liu Jilin,Ma Hongqing.A High Performance License Plate Recognition System Basedon the Web Technique[D]. [3] 郑南宁,张西宁,戴莹,朱海安.行驶车辆牌照自动识别系统[J].西安交通大学学报,1991,l:43-53. [4] 张俭鸽,李娜.车牌定位在VC中的实现[J].中国科技信息,2009, (13):123-124. [5] 郑影.基于VC++的汽车牌照定位与识别系统的设计[D].吉林大学硕士学位论文,2009. [6] 张宏林.精通Visual C++数字图像模式识别技术及工程实践[M]:第2版.北 文 献 综 述 京:人民邮电出版社,2008. [7] 张丽伟,张晶.基于图像处理的车牌定位方法的研究[J].长春工程学院学报(自然科学版),2009,10(2):100-103. [8] 李宇成,阴亮.基于图像的运动车辆速度测量[J].北方工业大学学报,2008(3):32—36. [9] 王广宇.汽车牌照识别系统综述[J].郑州轻工业学院学报(自然科学报),2001,16(2):47-50. [10] 李波,曾致远,周建中.一种自适应车牌图像定位新方法[J].中国图象图形学报,2009,14(10):1978-1984. [11]Kenneth.R.Castleman.Digital Image Processing,Prentice Hall.1998,4. 研 究 内 容 本课题主要利用数字图像处理的原理和技术,完成车牌区域的准确定位和分割的设计方案,研究相应的算法,并通过编程实现。 其具体内容如下: 1、理解和掌握数字图像处理的原理和技术,能熟练运用数字图像处理的常规算法。 2、深入研究预处理中的灰度化、二值化、背景削弱、中值滤波等原理,以及图像的灰度变换空间滤波处理等,探索车牌定位常用的方法,研究现在流行的一些算法,总结出其优点和缺点,能够继承传统方法的优点,并加以改进和提高。 3、掌握算法实现的编程语言,熟练运用设计实现的平台Visual C++ 6.0,提高查阅资料的能力,并通过编程实现车牌的定位。 4、研究一种新型的车牌定位方法,本课题采用多层次分割的思想,每次分割都尽可能地减少分析范围,经过多次分割后最终定位出车牌区域。 研 究 计 划 第1-2周 收集资料,熟悉课题,确定系统总体研究方案。 第3周 熟悉资料,写出开题报告。 第4—5周 熟悉数字图像处理的主要内容。 第6—7周 熟悉VC语言的编程和调试方法。 第8—9周 熟悉并掌握数字图像的常规算法,重点研究边缘检测和区域分割等算法。 第10-11周 用VC编程实现并调试各个处理模块。 第12-13周 对整个系统进行软件联调,整理设计成果。 第14周 撰写论文。 第15周 修改论文,准备答辩。 第16周 毕业答辩。 特 色 与 创 新 在车辆识别系统中,牌照区域定位是影响车牌识别系统性能的重要因素之一车牌定位准确与否直接影响字符识别的准确率,以往的拍照定位重要包括:J.Barroso等基于提出的基于水平线搜索的定位方法;R.Parisi提出的机遇TFC变换的频域分析法;Charl Coeitzee等提出的基于Niblack二值化算法及自适应边界搜索算法的定位方法。这些方法或者对背景比较复及光照条件比较敏感,或者定位速度比较慢,为了克服这些缺陷,本课题提出了基于特征的车辆牌照实时定位算法和多层次分割算法,能够更高效地实现车牌的准确定位和分割,充分体现了该系统的实时性。 指导教师 意 见 指导教师签名: 年 月 日 教研室意见 主任签名: 年 月 日 系部意见 教学主任签名: 年 月 日

119

社区成员

发帖
与我相关
我的任务
社区描述
2023福州大学软件工程K班
软件工程 高校 福建省·福州市
社区管理员
  • kevinkex
  • Devil angel
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧