人工智能

人工智能 · 圈子

674 位酷友已加入

本圈子收集关于人工智能的各种技术资料,加入圈子可以上传、下载资料,也可以使用提问来寻求资料或分享你认为有价值的站外链接~

关注推荐最新

热门标签

资源

智能人脸抓拍系统

IFCS Intelligent Face Capture System(智能人脸抓拍系统),本方案是基于CPU实现的,如需更好的性能,需要参考本方案思想改造成GPU的版本。 背景 智能摄像头(抓拍机)将人脸检测功能集成到网络摄像头内部,价格昂贵,智能检测功能与硬件高度集成,不利于后续功能扩展。 大量已有普通网络摄头没有被充分利用 目标 1.构建一种更通用的AI+视频监控的解决方案 2.充分利用现有资源,给普通网络摄像头赋能 建设方案(单节点模式) 在只有数十个摄像头的场景(个人认为30个以下),应用单节点方案就能解决问题。在摄像头更多的场景,应用集群模式是一种更好的解决方案。 架构设计 线程模式 A. 一个线程(生产者)轮询所有的监控摄像头,以固定的频率读取摄像头的实时数据; B. 将这些实时数据放入摄像头对应的分片中(Partition,同步阻塞队列); C. 每个分片都有一个线程(消费者)去消费该分片里面的数据。 因为人脸检查、人脸比对都是CPU密集型操作,每个线程消费一个分片和一个线程消费所有分片效果差不多,通过后面的实验数据也可以证明这一点,即使是多线程 ,响应时间基本也是线性增长的,并不能体现多线程的优势,因为单个人脸检查任务CPU占用率就接近80%。 建设方案(集群模式) 人脸检测&人脸去重 由于,检测对象可能长时间处在视频监控范围之内,因此,该时间段的视频帧充斥着大量重复检测对象。对所有重复对象都去做后续的1:N人脸识别显然不合理,因此需要合理的去重设计。 不同的人脸检测算法,其识别率、资源占用率不尽相同。但总的来说,人脸检测是一种CPU密集型操作,本课题原型采用自OpenCV封装的哈尔级联人脸检测算法。经测试,该算法检测单帧耗时300ms左右,CPU占用率接近80%。 A. 利用openCV人脸检测算法,找出帧里面包含的所有人脸,并保存至临时缓存。(为方便比对,缓存中存放的是经特征提取后的特征值) B. 将第一步的人脸逐一和缓存中的人脸比对,缓存中没有的人脸则保存下来发往下一步业务逻辑 C. 用第一步得到的人脸替换缓存中的人脸 去重原理-1: 去重原理-2: 去重原理-3: 去重原理-4: 性能测试(单节点模式) 实验结果表明,一个消费者(线程)任务耗时300ms、CPU占用率达到80%,随着消费者数目增多,任务耗时延长,CPU占用率进一步增高;当消费者(线程)任务达到8个时,平均任务完成耗时为2000ms,CPU占用率高达95%以上。(英特尔 Core i7-8550U @ 1.80GHz 四核 ,核心数: 4 / 线程数: 8) 抓拍机以海康威视的产品举例,其价格在2000元左右,IFCS节点服务器为一台价格4800元的个人电脑,普通网络摄像头在200元左右。从数据中可以得知,当监控数量等于3时,本方案能节省10%的成本,并且响应时间和抓拍机基本一致;当监控数量等于6时,本方案能节省50%的成本,并且最长响应时间不足2秒;随着监控点数量越多,节省的成本越多,相应的响应时间越长。 环境配置(集群模式) linux Zookeeper配置 Kafka配置 Hadoop配置 windows Zookeeper配置 (https://www.jianshu.com/p/f7037105db46) Kafka配置(https://www.jianshu.com/p/64d25dcf8300) Hadoop配置: 下载Haddop 修改hadoop-x.x.x/etc/hadoop/hadoop-env.cmd中的JAVA_HOME (路径不能空格) 展望 增加GPU图像处理单元,提升图像处理效率,以便单个IFCS节点能负载更多的摄像机。 转载自:https://github.com/xuzhijvn/ifcs

资源

【Demo】深度照片风格转换

深度照片风格转换 论文《Deep Photo Style Transfer》的代码和数据 设置 此代码基于torch,它已经在Ubuntu 14.04 LTS上进行了测试。 依赖: Torch (with matio-ffi and loadcaffe) Matlab or Octave CUDA后端: CUDA cudnn 下载VGG-19: 编译cuda_utils.cu(在makefile中调整PREFIX和NVCC_PREFIX): 用法 快速开始 要使用提供的脚本生成所有结果(在examples/),只需运行: 在Matlab或Octave中输入以下命令: 最终输出结果在examples / final_results /中。 基本用法 给定带有语义分割蒙版的输入图像和样式图像,将它们分别放在examples /中。 它们将具有以下文件名形式:examples / input / in <id> .png,examples / style / tar <id> .png和examples / segmentation / in <id> .png,examples / segmentation / tar <id>.png; 在Matlab中使用gen_laplacian / gen_laplacian.m计算抠图拉普拉斯矩阵,输出矩阵将具有以下文件名形式:gen_laplacian / Input_Laplacian_3x3_1e-7_CSR <id> .mat; 注意:请确保内容图像分辨率与Matlab中的Matting Laplacian计算和Torch中的样式转换一致,否则结果将不正确。 运行以下脚本以生成分段的中间结果: 运行以下脚本以生成最终结果: 你可以将-backend cudnn和-cudnn_autotune传递给两个Lua脚本(步骤3.和4.),从而潜在地提高速度和内存使用率。libcudnn.so必须位于LD_LIBRARY_PATH中,这需要cudnn.torch。 图像分割 注意:在论文中,使用从DilatedNet修改而来的自动场景分割算法生成所有比较结果。手动分段可实现更多不同的任务,因此我们在examples/segmentation/中提供了掩膜(mask)。 我们所使用的掩膜颜色(你可以在两个* .lua文件的ExtractMask函数中添加更多颜色): 颜色 RGB值 十六进制值 blue 0 0 255 0000ff green 0 255 0 00ff00 black 0 0 0 000000 white 255 255 255 ffffff red 255 0 0 ff0000 yellow 255 255 0 ffff00 grey 128 128 128 808080 lightblue 0 255 255 00ffff purple 255 0 255 ff00ff 以下是一些用于为照片图像创建分割mask的自动和手动工具: 自动: MIT Scene Parsing SuperParsing Nonparametric Scene Parsing Berkeley Contour Detection and Image Segmentation Resources CRF-RNN for Semantic Image Segmentation Selective Search DeepLab-TensorFlow 手动: Photoshop Quick Selection Tool GIMP Selection Tool GIMP G'MIC Interactive Foreground Extraction tool 举例 这是算法的一些结果(从左到右是输入,样式和我们的输出): 来源https://github.com/luanfujun/deep-photo-styletransfer

资源

基于Bilstm+CRF的命名实体识别模型

基于Bilstm+CRF的命名实体识别模型 基于字向量的CNN池化双向BiLSTM与CRF模型的网络,可能一体化的完成中文和英文分词,词性标注,实体识别。主要包括原始文本数据,数据转换,训练脚本,预训练模型,可用于序列标注研究.注意:唯一需要实现的逻辑是将用户数据转化为序列模型。分词准确率约为93%,词性标注准确率约为90%,实体标注(在本样本上)约为85%。 tips 中文分词,词性标注,实体识别,在使用上述模型时,本质是就是标注问题!!! 如果你第一次使用相关的模型,只需要将 self.class_dict 里的词典改为你所需要的词典,然后将你的文本数据转换成列向量(竖着的数据形式,第三步的样子即可)。文本数据各种各样,对于很多第一次入门的小伙伴来说,最难的部分反而是数据转换。运行成功后,可以对参数,超参数,网络结构进行调参即可。 主要实现使用了基于字向量的四层双向LSTM与CRF模型的网络.该项目提供了原始训练数据样本与转换版本,训练脚本,预训练模型,可用于序列标注研究.把玩和PK使用. 项目介绍 医学实体识别是让计算机理解病历、应用病历的基础。基于对病历的结构化,可以计算出症状、疾病、药品、检查检验等多个知识点之间的关系及其概率,构建医疗领域的知识图谱,进一步优化医生的工作. CCKS2018的电子病历命名实体识别的评测任务,是对于给定的一组电子病历纯文本文档,识别并抽取出其中与医学临床相关的实体,并将它们归类到预先定义好的类别中。组委会针对这个评测任务,提供了600份标注好的电子病历文本,共需识别含解剖部位、独立症状、症状描述、手术和药物五类实体。 领域命名实体识别问题自然语言处理中经典的序列标注问题, 本项目是运用深度学习方法进行命名实体识别的一个尝试. 实验数据 一, 目标序列标记集合O非实体部分,TREATMENT治疗方式, BODY身体部位, SIGN疾病症状, CHECK医学检查, DISEASE疾病实体, 二, 序列标记方法 采用BIO三元标记 三, 数据转换 模型输出样式: 模型搭建 本模型使用预训练字向量,作为embedding层输入,然后经过两个双向LSTM层进行编码,编码后加入dense层,最后送入CRF层进行序列标注. 模型效果 模型的训练: 模型 模型的测试: python lstm_predict.py, 对训练好的实体识别模型进行测试,测试效果如下: 总结 1,本项目针对医学命名实体任务,实现了一个基于Bilstm+CRF的命名实体识别模型 2,本项目使用charembedding作为原始特征,训练集准确率为0.9649,测试集准确达到0.8451 3,命名实体识别可以加入更多的特征进行训练,后期将逐步实验其他方式. 转载自:https://github.com/liweimin1996/Min_NLP_Practice

资源

基于CTPN和DENSENET的中文文本检测和识别

项目简介 为了能将一张图像中的多行文本识别出来,可以进行任务分为两步: 检测图像中每一行文本的位置 根据位置从原始图像截取一堆子图像 只需识别出子图像的文字,再进行排序组合即可 因此,采用两类模型: 文本检测:CTPN 文本识别:Densenet + ctc 安装 运行环境 操作系统:win10 Python:3.6 安装步骤 1.安装tensorflow 1.9.0,如果电脑配置了gpu环境,请选择gpu版本,否则选择cpu版本 安装该包 执行速度 使用 OCR 用于识别一张图片中的文字 编程方式 get_or_create() 支持以下参数用于使用自己训练的模型: ctpn_weight_path ctpn_config_path densenet_weight_path densenet_config_path dict_path 命令行方式 1.ctpn模型权重文件位置不指定默认使用weights/weights-ctpnlstm-init.hdf5 2.ctpn模型配置文件位置不指定默认使用config/ctpn-default.json 3.densenet模型权重文件位置不指定默认使用weights/weights-densent-init.hdf5 4.densenet模型配置文件位置不指定默认使用config/densent-default.json 5.字典文件位置不指定默认使用dictionary/char_std_5990.txt 示例 CTPN 用于定于图像中文字的位置 编程方式 命令行方式 1.权重文件位置不指定默认使用weights/weights-ctpnlstm-init.hdf5 2.配置文件位置不指定默认使用config/ctpn-default.json 示例 Densenet 用于识别固定图像高度中的文字,默认图像高度为32 编程方式 命令行方式 1.权重文件位置不指定默认使用weights/weights-densent-init.hdf5 2.配置文件位置不指定默认使用config/densent-default.json 3.字典文件位置不指定默认使用dictionary/char_std_5990.txt 示例 训练 数据集说明 CTPN 训练使用的数据集格式与VOC数据集格式相同,目录格式如下: VOCdevkit VOC2007 Annotations ImageSets JPEGImages Densenet + ctc 使用的数据集分为3部分 文字图像 标注文件:包括图像路径与所对应的文本标记(train.txt, test.txt) 字典文件:包含数据集中的所有文字 (char_std_5990.txt) 数据集链接: ctpn: 链接: https://pan.baidu.com/s/19iMHzjvNfQS22NdFjZ_2XQ 提取码: nw7a densenet: 链接: https://pan.baidu.com/s/1LT9whsTJx-S48rtRTXw5VA 提取码: rugb 关于创建自己的文本识别数据集,可参考:https://github.com/Sanster/text_renderer。 CTPN 训练 ctpn 的训练需要传入2个必要参数: 图像目录位置 标注文件目录位置 <模型配置文件位置> 用于指定模型的一些参数,若不指定,将使用默认配置: <保存模型训练权重文件位置> 若不指定,会保存到当前目录下的model文件夹 训练情况: Densenet 训练 Densnet 的训练需要4个必要参数: 训练图像位置 字典文件位置 训练文件位置 测试文件位置 <模型配置文件位置> 用于指定模型使用的配置文件路径,若不指定,默认配置如下: <保存模型训练权重文件位置> 若不指定,会保存到当前目录下的model文件夹 训练情况: 训练好的权重文件 链接: https://pan.baidu.com/s/1HaeLO-fV_WCtTZl4DQvrzw 提取码: ihdx 转载自:https://github.com/GlassyWing/text-detection-ocr

计算机

计算机·圈子   首发

侧卫 更新了
资源

人工智能2020:落地挑战与应对-爱分析

内容 过去的一段时间内,人工智能进入了技术成熟度曲线的低谷期,技术炒作的泡沫破裂,行业关注重心开始转变为人工智能如何产业落地。 然而由于技术和业务需求之间的鸿沟,人工智能在走向产业落地的过程中面临一系列的挑战。企业在应用人工智能技术推进业务转型升级的过程中,必须要了解这些问题并加以有效应对。 为了分析上述问题,报告回顾了人工智能的行业概况,并结合实践案例分析了人工智能技术给产业带来的具体价值创造和各行业落地进展和未来应用趋势。同时报告系统地分析了人工智能落地产业中,在数据、算法模型、业务场景理解、服务方式、投入产出比等各方面面临的挑战和应对方法,希望帮助企业推动人工智能的价值落地。 目录 1 人工智能走向产业应用 2 人工智能助力企业数字化转型 3 人工智能落地挑战及应对 4 人工智能应用趋势展望 结语 发布单位:爱分析 发布时间:2020

资源

【Demo】基于LaserTagger的中文文本数据增强

文本复述——基于LaserTagger的中文文本数据增强 一.概述 文本复述任务是指把一句/段文本A改写成文本B,要求文本B采用与文本A略有差异的表述方式来表达与之意思相近的文本。 改进谷歌的LaserTagger模型,使用LCQMC等中文语料训练文本复述模型,即修改一段文本并保持原有语义。 复述的结果可用于数据增强,文本泛化,从而增加特定场景的语料规模,提高模型泛化能力。 二.模型介绍 谷歌在文献《Encode, Tag, Realize: High-Precision Text Editing》中采用序列标注的框架进行文本编辑,在文本拆分和自动摘要任务上取得了最佳效果。 在同样采用BERT作为编码器的条件下,本方法相比于Seq2Seq的方法具有更高的可靠度,更快的训练和推理效率,且在语料规模较小的情况下优势更明显。 谷歌公开了本文献对应的代码,但是原有任务与当前任务有一定的差异性,需要修改部分代码,主要修改如下: A.分词方式:原代码针对英文,以空格为间隔分成若干词。现在针对中文,分成若干字。 B.推理效率:原代码每次只对一个文本进行复述,改成每次对batch_size个文本进行复述,推理效率提高6倍。 三.文件说明和实验步骤 1.安装python模块 参见"requirements.txt", "rephrase.sh" 2.训练和评测模型 文件需求 bert预训练的tensorflow 模型 采用RoBERTa-tiny-clue(中文版)预训练模型。 网址 如果想采用其他预训练模型,请修改“configs/lasertagger_config.json". 代码跑通顺序: 第一种方法: 修改运行rephrase.sh 第二种方法详解: 第一步:制作训练测试验证集 python get_pairs_chinese/get_text_pair_lcqmc.py 获得lcqmc中的文本复述语料(语义一致的文本对,且字面表述差异不能过大,第三列为最长公共子串长度与总长度的比值) 只需要修改lcqmc的目录位置即可 python get_pairs_chinese/get_text_pair.py 可根据自己的预料获得文本复述语料(第三列为最长公共子串长度与总长度的比值) 再运行merge_split_corpus.py 将 结果数据 按比例划分 训练、测试、验证集 第二步:短语_词汇表_优化 第三步: 1、制作后续训练模型的验证集 2、制作后续训练模型的训练集 第四步: 1、训练模型 2、 模型整理 第五步 根据test文件进行预测 第六步 对第五步预测的文件进行打分。 3.启动文本复述服务 根据自己需要,可选 根据自己情况修改"rephrase_server.sh"文件中几个文件夹的路径,使用命令"sh rephrase_server.sh"可以启动一个文本复述的API服务 本API服务可以接收一个http的POST请求,解析并对其中的文本进行泛化,具体接口请看“rephrase_server/rephrase_server_flask.py" 有几个脚本文件如rephrase_for_qa.sh,rephrase_for_chat.sh,rephrase_for_skill.sh是作者自己办公需要的,可以忽略 四.实验效果 1.在公开数据集Wiki Split上复现模型: Wiki Split数据集是英文语料,训练模型将一句话拆分成两句话,并保持语义一致,语法合理,语义连贯通顺,如下图所示。 Exact score=15,SARI score=61.5,KEEP score=93,ADDITION score=32,DELETION score=59, 基本与论文中的Exact score=15.2;SARI score=61.7一致(这些分数均为越高越好)。 2.在自己构造的中文数据集训练文本复述模型: (1)语料来源 (A)一部分语料来自于LCQMC语料中的正例,即语义接近的一对文本; (B)另一部分语料来自于宝安机场用户QA下面同一答案的问题。; 因为模型的原理,要求文本A和B在具有一定的重合字数,故过滤掉上述两个来源中字面表述差异大的文本,如“我要去厕所”与“卫生间在哪里”。对语料筛选后对模型进行训练和测试。 (2)测试结果 对25918对文本进行复述和自动化评估,评测分数如下(越高越好): Exact score=29,SARI score=64,KEEP score=84,ADDITION score=39,DELETION score=66. CPU上耗时0.5小时,平均复述一句话需要0.72秒。 可能是语言和任务不同,在中文文本复述上的评测分数比公开数据集高一些。 五.一些trick 1.可以设定对于某些字或词不做修改 如对实体识别NER的语料泛化,需要保证模型不能修改其中的实体; 对业务语料泛化,也可以根据情况保证模型不能修改其中的关键字 如日期,航班号等; 目前,是通过正则的方式定位这些不能被模型修改的位置,然后将这些位置的location设置为1,具体实现参见tagging.py. 2.增加复述文本与原文本的差异度 可以对训练语料中的text_a先进行随机的swag操作,相应地脚本中enable_swap_tag改为true,再训练模型将其改写为text_b; 实际应用或测试时同样将原始文本text_a先进行随机的swag操作,然后利用模型改写为text_b; 因为训练语料中text_a是不通顺,但text_b是通顺的,所以实际应用或测试时仍然会得到通顺的复述结果。 六.数据集 You can download LCQMC data set from https://download.csdn.net/download/tcd1112/12357994 ,But other data is the company data can't give you. You can also leave your E-mail, I will send you LCQMC data 七.文件 tree树如下: 文件框架格局如下: ├── chat_rephrase │ ├── init.py │ ├── predict_for_chat.py │ └── score_for_qa.txt ├── configs │ ├── lasertagger_config_base.json │ └── lasertagger_config.json ├── data │ ├── LCQMC │ │ ├── dev.txt │ │ ├── test.txt │ │ └── train.txt │ └── QQ │ └── Q_Q.txt ├── domain_rephrase │ ├── init.py │ ├── predict_for_domain.py │ └── rephrase_for_domain.sh ├── get_pairs_chinese │ ├── curLine_file.py │ ├── get_text_pair_lcqmc.py │ ├── get_text_pair.py │ ├── get_text_pair_shixi.py │ ├── get_text_pair_sv.py │ ├── init.py │ └── merge_split_corpus.py ├── official_transformer │ ├── attention_layer.py │ ├── beam_search.py │ ├── embedding_layer.py │ ├── ffn_layer.py │ ├── init.py │ ├── model_params.py │ ├── model_utils.py │ ├── README │ ├── tpu.py │ └── transformer.py ├── qa_rephrase │ ├── init.py │ └── predict_for_qa.py ├── rephrase_server │ ├── init.py │ ├── rephrase_server_flask.py │ └── test_server.py ├── skill_rephrase │ ├── init.py │ └── predict_for_skill.py ├── AR_architecture.png ├── bert_example.py ├── compute_lcs.py ├── CONTRIBUTING.md ├── curLine_file.py ├── init.py ├── LICENSE ├── output ├── phrase_vocabulary_optimization.py ├── prediction.txt ├── predict_main.py ├── predicts.py ├── predict_utils.py ├── preprocess_main.py ├── README.md ├── rephrase.sh ├── requirements.txt ├── run_lasertagger.py ├── run_lasertagger_utils.py ├── sari_hook.py ├── score_lib.py ├── score_main.py ├── sentence_fusion_task.png ├── tagging_converter.py ├── tagging.py ├── transformer_decoder.py └── utils.py 来源https://github.com/tongchangD/text_data_enhancement_with_LaserTagger

资源

【数据集】CMRC 2018中文跨度提取机阅读理解数据集

CMRC 2018 该存储库包含CMRC 2018和DRCD这个公开的中文跨度提取机阅读理解数据集(如SQuAD)以及其BERT基线系统。 数据集 CMRC 2018(简体中文):https://github.com/ymcui/cmrc2018 DRCD(繁体中文):https://github.com/DRCSolutionService/DRCD 你可以通过上面的链接下载这些数据集,或者,也可以直接从本资源下载。 请注意,我们使用类似于SQuAD的CMRC 2018数据集,可以通过链接进行访问。 有关更多中文机器阅读理解数据集,请参考:https://github.com/ymcui/Chinese-RC-Datasets 基线系统 依赖要求 除了TensorFlow == 1.12之外,没有其他特殊的依赖要求。 也可以在其他版本的TensorFlow上使用(未经测试)。 该代码基于run_squad.py的官方BERT实现。 可查:https://github.com/google-research/bert/blob/master/run_squad.py 用法 步骤1:下载BERT权重(如果有,请跳过) 中文(基础) 多语种(基础) 步骤2:设定正确的局部变数 $ PATH_TO_BERT:BERT权重的路径(TensorFlow版本) $ DATA_DIR:数据集的路径 $ MODEL_DIR:模型的输出目录 步骤3:训练 然后,我们使用以下脚本进行训练。 我们以CMRC 2018数据集和多语言BERT为例。 步骤4:评估 我们对CMRC 2018和DRCD使用官方评估脚本。 请注意,由于DRCD官方不提供评估脚本,因此我们也将cmrc2018_evaluate.py用于DRCD。 基准结果 我们提供BERT-Chinese和BERT-multilingual的基准线。 请注意,为了获得可靠的结果,每个基准线均进行10次运行,并对它们进行了平均评分(不适用于隐藏集)。 来源https://github.com/ymcui/cmrc2018

资源

分布式WEB指纹识别平台

w11scan w11scan是一种分布式的WEB指纹识别系统(包括CMS识别,js框架,组件容器,代码语言,WAF等),管理员可以在WEB端添加/修改指纹,建立批量的扫描任务,并支持多种搜索语法。 安装 软件本身安装非常简单,比较复杂的是一些框架,数据库的安装。 安装 码头安装 流程演示视频 演示视频地址: https://pan.baidu.com/s/1SMgd9QVHqaEGerI2oJl1Ig 密码:qkew 使用的技术和思路 框架 之前编写的扫描器追求的是轻巧方便,安装简单(甚至不需要安装其他库),但是这一版使用了很多框架,python3为主要编成语言。端数据库是mongodb,WEB用的Django。 识别技术 w11scan内置了1800多条常见的指纹,可以识别多个538种常见CMS,而且WEB端可以添加这些CMS指纹。另外也集成了builtwith和Webeye https ://github.com/zerokeeper/WebEye/。 在此表示感谢。 特色 每个指纹都会有一个命中率标记,每次识别成功后,相应指纹命中率会增加,使用指纹时优先使用命中中率高的指纹。 优先使用命中率最高的指纹,其次,将指纹按照访问路径分类排序,再优先使用访问路径次数最多的指纹。 一个指纹识别成功后,会停止识别该URL的其他指纹,开始下一个任务 搜索功能支持多种语法,全文搜索(mongodb特性) 支持将内容下载为报表 预览可参见:https://x.hacking8.com/post-256.html 结果展示 转载自:https://github.com/w-digital-scanner/w11scan

资源

基于CNN、BI-LSTM的文本分类

项目介绍 中文情感分析的实质是文本分类问题,本项目分别采用CNN和BI-LSTM两种模型解决文本分类任务,并用于情感分析,达到不错的效果。 两种模型在小数据集上训练,在验证集的准确率、号回率及F1因子均接近90% 项目设计的目标可以接受不同语料的多种分类任务,只要语料按照特定格式准备好,就可以开始调参训练、导出、serving。 环境 在 python3.6 & Tensorflow1.13 下工作正常 其他环境也许也可以,但是没有测试过。 还需要安装 scikit-learn package 来计算指标,包括准确率回召率和F1因子等等。 语料的准备 语料的选择为 谭松波老师的评论语料,正负例各2000。属于较小的数据集,本项目包含了原始语料,位于 data/hotel_comment/raw_data/corpus.zip 解压 corpus.zip 后运行,并在raw_data运行 python fix_corpus.py 将原本gb2312编码文件转换成utf-8编码的文件。 词向量的准备 本实验使用开源词向量chinese-word-vectors 选择知乎语料训练而成的Word Vector, 本项目选择词向量的下载地址为 https://pan.baidu.com/s/1OQ6fQLCgqT43WTwh5fh_lg ,需要百度云下载,解压,直接放在工程目录下 训练数据的格式 参考 data/hotel_comment/*.txt 文件 step1 本项目把数据分成训练集和测试集,比例为4:1, 集4000个样本被分开,3200个样本的训练集,800的验证集。 对于训练集和验证集,制作训练数据时遵循如下格式: 在{}.words.txt文件中,每一行为一个样本的输入,其中每段评论一行,并用jieba分词,词与词之间用空格分开。 除了 地段 可以 , 其他 是 一塌糊涂 , 惨不忍睹 。 和 招待所 差不多 。 帮 同事 订 的 酒店 , 他 老兄 刚 从 东莞 回来 , 详细 地问 了 一下 他 对 粤海 酒店 的 印象 , 说 是 硬件 和 软件 : 极好 ! 所以 表扬 一下 在{}.labels.txt文件中,每一行为一个样本的标记 NEG POS 本项目中,可在data/hotel_comment目录下运行build_data.py得到相应的格式 step2 因为本项目用了index_table_from_file来获取字符对应的id,需要两个文件表示词汇集和标志集,对应于vocab.labels.txt和vocab.words.txt,其中每一行代表一个词或者是一行代表一个标志。 本项目中,可在data/hotel_comment目录下运行build_vocab.py得到相应的文件 step3 由于下载的词向量非常巨大,需要提取训练语料中出现的字符对应的向量,对应本项目中的data/hotel_comment/w2v.npz文件 本项目中,可在data/hotel_comment目录下运行build_embeddings.py得到相应的文件 CNN 结构: 中文词Embedding 多个不同长度的定宽卷积核 最大池化层,每个滤波器输出仅取一个最大值 全连接 CNN模型的训练,在cnn目录底下运行 python main.py CNN模型训练时间 在GTX 1060 6G的加持下大概耗时2分钟 CNN模型的训练结果 在model目录底下运行 python score_report.py cnn/results/score/eval.preds.txt 模型二: BI-LSTM 中文词Embedding bi-lstm 全连接 BI-LSTM模型的训练,在lstm目录底下运行 python main.py BI-LSTM模型训练时间 在GTX 1060 6G的加持下大概耗时5分钟 BI-LSTM模型的训练结果 在model目录底下运行 python score_report.py lstm/results/score/eval.preds.txt 模型的导出和serving(BI-LSTM为例) 模型导出 在lstm目录底下运行 python export.py 导出estimator推断图,可以用作prediction。本项目已上传了saved_model,可以不通过训练直接测试。 在model/lstm目录底下运行 python serve.py可以利用导出的模型进行实体识别。详情见代码。 训练结果 虽然模型由真实评论数据训练而成,这些数据长短不一(有的分词后长度超过1000),但由上图可得,模型对短评论表现尚可。 转载自:https://github.com/linguishi/chinese_sentiment

资源

TideFinger——指纹识别小工具

TideFinger 一个开源的指纹识别小工具,使用了传统和现代检测技术相结合的指纹检测方法,让指纹检测更快捷、准确。 介绍 通过分析web指纹的检测对象、检测方法、检测原理及常用工具,设计了一个简易的指纹搜集脚本来协助发现新指纹,并提取了多个开源指纹识别工具的规则库并进行了规则重组,开发了一个简单快捷的指纹识别小工具TideFinger,并实现了一套在线的指纹识别平台“潮汐指纹” http://finger.tidesec.net 通过对各种识别对象、识别方法、识别工具的分析,发现大家的指纹库各式各样,识别方式也是各有千秋,传统的md5、url路径的方式居多,识别header信息的也是不少,但没有一个能集众家之长的小工具和指纹库。 于是本项目参考了webfinger和whatcms的部分代码并进行了整合优化,做了一个小工具TideFinger。 安装 识别脚本的安装和使用都比较简单。 安装python2依赖库 执行脚本 指纹识别界面如下: 技术原理及实现 指纹库整理 本项目搜集了大量的开源指纹识别工具,从中提取了指纹库,进行了统一的格式化处理并进行去重,最终得到了一个大约2078条的传统指纹库。本来想把fofa的库也合并进来,发现格式差异有些大,便保持了fofa指纹库,并把WebEye的部分指纹和fofa指纹进行了合并。这样就保留了两个指纹库,其中cms指纹库为传统的md5、url库,大约2078条指纹,可通过关键字、md5、正则进行匹配,fofa库为2119指纹,主要对Header、url信息进行匹配。 指纹库优化 在对指纹库整理去重后,对每个指纹进行了命中率的标识,当匹配到某个指纹时该指纹命中率会加1,而在使用指纹时会从优先使用命中率高的指纹。 然后从互联网中爬取了10W个域名进行了命中率测试,然后对一些误报率比较高的指纹进行了重新优化,得到了一份相对更高效的指纹库。 未知指纹发现 目前新指纹的识别基本还是靠人工发现然后分析规则再进行添加,所以各平台都有提交指纹的功能,但是由于没有这种资源,只能另想办法。 于是想到了一个比较笨的方法:从网站中爬取一些静态文件,如png、ico、jpg、css、js等,提取url地址、文件名、计算md5写入数据库,这样再爬下一个网站,一旦发现有相同的md5,就把新的url也加入到那条记录中,并把hint值加1,这样爬取10W个站点后,就能得到一个比较客观的不同网站使用相同md5文件的数据了。 有兴趣的可以查看具体代码https://github.com/TideSec/TideFinger/blob/master/count_file_md5.py文件。 爬取的结果如下: 里面肯定很多都属于误报,比如上图中第一个其实是个500错误页面,所以出现的比较多,第二个是政府网站最下边那个常见的“纠错”的js,所以用的也比较多。 经过一些分析整理也发现了一些小众的CMS和建站系统的指纹,比如三一网络建站系统的newsxx.php,比如大汉JCM的jhelper_tool_style.css等等,后续会持续把这些新的指纹丰富到指纹库中去。 指纹识别脚本 有了指纹库之后,识别脚本就相对比较简单了,已有的一些也都比较成熟了,直接使用了webfinger和whatcms的部分代码并进行了整合优化,于是就有了TideFinger。 1、功能逻辑都比较简单,先用fofa库去匹配,然后获取一定banner,如果banner中识别除了cms,则返回结果,如果未识别到cms,则会调用cms规则库进行匹配各规则。 2、脚本支持代理模式,当设置了-p参数,且proxys_ips.txt文件包含代理地址时,脚本会随机调用代理地址进行扫描,以避免被封ip,不过这样的话效率可能会低一些。毕竟搜集的免费代理质量还是差一些,速度会慢很多。有钱人可以找收费代理池,然后每个规则都用不同代理去请求,这样肯定不会被封! 代理地址的搜集可以使用我修改的另一个代理池https://github.com/TideSec/Proxy_Pool 提供了自动化的代理ip抓取+评估+存储+展示+接口调用。 3、经测试,一般网站把所有指纹跑一遍大约需要30秒时间,个别的网站响应比较慢的可能耗时更长一些,可以通过设置网站超时时间进行控制。 指纹识别平台 在有了指纹库和识别脚本之后,由于想继续完善下这个功能,于是又加入了其他一些功能,有个这个在线指纹查询平台http://finger.tidesec.net。 开始想加的很多,但后来在速度和时间方面不得不进行了一定的取舍,于是就有了目前如下的功能。 1、网站信息:网站标题、状态码、302跳转信息等; 2、IP地址信息:IP归属地、IP服务商信息、GPS信息; 3、CDN识别:对目标是否使用CDN进行检测,但目前CDN识别指纹还不多,对部分识别出使用CDN的目标还会列出来CNAME; 4、中间件识别:主要通过http头信息中的XPB、server等字段获取中间件信息,如nginx、iis、tomcat等; 5、更多banner:主要是调用了whatweb和Wapplyzer进行更多banner信息的获取,如jquery、bootstrap等; 6、操作系统识别:识别比较简单,通过ttl值和文件大小写是否敏感...用nmap去识别的话速度太慢... 7、本来还加入了子域名发现、端口扫描和waf探测等等,但发现耗时相对较长,而且比较容易被封IP,所以又去掉了。 待解决的问题 1、指纹库的继续完善 2、代理问题:虽然集成了代理功能,但经实际使用来看,搜集的免费代理质量还是差一些,速度会慢很多。 3、IP会被封:有的网站防护对目录枚举或一些路径非常敏感,会封IP地址; 4、下一步尝试对http头进行语义分析,从海量网站中提取分析header的共性,更高效的发现未知指纹。 转载自:https://github.com/TideSec/TideFinger

资源

【Demo】活体人脸识别

活体人脸识别 之前公司项目需要,研究了一下人脸识别和活体识别,并运用免费的讯飞人脸识别,在其基础上做了二次开发,添加了活体识别。项目需要就开发了张嘴和摇头两个活体动作的识别。 这里简单介绍一下当时的开发思路和一些个人拙见,欢迎大神指点。 首先说一下讯飞第三方的人脸识别的几个缺点:1.识别不稳定,各点坐标跳动偏差比较大,不容易捕捉;2.CPU使用率比较高,连续识别一会儿手机会明显发烫,手机配置低的,就会反应很慢,本人使用的iPhone 6s,配置还可以,还算比较流畅,但也会发烫。3.屏幕小的手机识别率相对会低一点,当然这也和手机的配置脱不了干系。 下面开始我们的活体识别开发之路: 确定位置 讯飞的人脸识别坐标跳动比较大,如果全屏识别发现很容易出现错误的识别,导致识别错误的被通过,所以为了降低这个可能性,特意加了脸部位置的限制,把识别位置和范围大大缩小,大大提高了识别精度和成功率。 原版的Demo里给出了人脸框的坐标,也显示出了人脸的框,代码如下: 在这段代码的启发下,我对此作了改装,把动态的人脸框,改成了静态的框,这个静态框,就是指示和限定人脸位置的框,根据屏幕大小画出的,代码如下: 这里的框是限定脸部位置的,所以脸部位置超出设置的范围的时候,就需要停止人脸识别,停止动作识别,并给出用户提示,提示用户调整位置,或者明确告诉用户,脸部距离屏幕太近了,或者太远了。判定脸部位置的代码如下: 这个方法基于Demo中第三方封装库中给的代理方法-(NSString*)praseDetect:(NSDictionary* )positionDic OrignImage:(IFlyFaceImage*)faceImg; 判断脸部并返回人脸的脸框的坐标,所以利用给的脸部框坐标做判断,超出设置的范围时停止识别。 其中,脸部框两边的坐标左边大于一定值且右边小于一定值的时候,判定为脸部位置“太远了”;同理,脸部框两边的坐标左边小于设定边框点且右边大于设定边框右边点的时候,判定为脸部位置“太近了”;如果位置正确,则脸部位置到达正确位置,这个时候显示脸部各点,并开始活体动作识别:张嘴和摇头。我这里先做张嘴,再做摇头。 张嘴识别 张嘴识别,这里的嘴部定点有五个:上、下、左、右、中。这里我取的是上下左右四个点,并判断上下点的距离变化和左右点的距离变化,一开始只判断了上下点距离变化超过设定值得时候就判断为张嘴,后来测试过程中,上下晃动屏幕,会判断失败,直接通过。所以为了解决这个bug,并判断更严谨,加上了左右点的判断,即上下点变化大于设定值并且左右点变化小于设定值的时候判定为张嘴动作识别通过。代码如下: 张嘴动作识别通过后,开始判断摇头动作。 摇头识别 摇头识别,这里的摇头动作相比于张嘴动作,摇头动作我没有限制位置,张嘴识别必须在设置的框内完成动作,摇头动作不需要,因为摇头动作幅度大,需要的位置大,如果再限定位置的话,识别要求比较高,不容易识别通过,用户体验差。 摇头识别的思路比较简单,没有做细致的计算分析,仅仅是判断了鼻尖的点的坐标改变大于设定值,即判定为摇头动作通过。代码如下: 其实这样判断摇头是有bug的,左右晃动手机超过一定的距离,也会判定摇头通过,当时时间紧张,没做过多处理,所以就暂时这样判定了。 其他细节 判断比较数据,我用了计数法,取得是不同时间点的帧图片上的点的位置并记录下来,然后和初始值做比较,所以如果判断不符合要求,需要清除数据,并重新开始记录并判定。 另外Demo里给出了两种记录动作的方式,一种是有声音的拍照,一种是无声音的截图,可以为人脸的对比做铺垫。 尾声 Demo的gitHub地址为:https://github.com/fuzheng0301/FaceRecognition ,讲解博客在:https://www.jianshu.com/p/1b7ae429f14c ,如果感觉还可以,感谢点击star,大家的支持是我不断努力源源不断的动力。 来源https://github.com/fuzheng0301/FaceRecognition

  • 1
  • 23
  • 24
  • 25
  • 46
前往