Paddle Inference 模型推理流程
分别介绍文字检测、方向分类器和文字识别3个模型,基于Paddle Inference的推理过程。
离线推理,即在特定机器上部署的代码只能在这台机器上使用,无法通过其他机器进行访问
“WHL”是“WHeeL”的英文缩写,意思是“车轮” ,whl 格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件
为了更加方便快速体验OCR文本检测与识别模型,PaddleOCR提供了基于Paddle Inference预测引擎的whl包,方便您一键安装,体验PaddleOCR。
pip install paddleocr -i http://pypi.tuna.tsinghua.edu.cn/simple --verbose
paddleocr whl包会自动下载PP-OCRv2超轻量模型作为默认模型,也支持自定义模型路径、预测配置等参数,参数名称与基于Paddle Inference的python预测中参数相同。
import cv2
import matplotlib.pyplot as plt
import numpy as np
import os
from paddleocr import PaddleOCR, draw_ocr
ocr = PaddleOCR(use_gpu=False) # need to run only once to download and load model into memory
img_path = './images/006.jpg'
result = ocr.ocr(img_path, rec=False)
for line in result:
print(line)
# 显示结果
from PIL import Image
image = Image.open(img_path).convert('RGB')
im_show = draw_ocr(image, result, txts=None, scores=None, font_path='./fonts/simfang.ttf')
plt.figure(figsize=(15, 8))
plt.imshow(im_show)
plt.show()
可以指定det=False
,仅运行单独的识别模块。
import matplotlib.pyplot as plt
from paddleocr import PaddleOCR, draw_ocr
ocr = PaddleOCR(use_gpu=False) # need to run only once to download and load model into memory
img_path = './images/006.jpg'
result = ocr.ocr(img_path, det=False)
for line in result:
print(line)
可以指定det=False, rec=False, cls=True
,仅运行方向分类器。
import cv2
import matplotlib.pyplot as plt
from paddleocr import PaddleOCR, draw_ocr
ocr = PaddleOCR(use_angle_cls=True, use_gpu=False) # need to run only once to download and load model into memory
img_path = './images/006.jpg'
result = ocr.ocr(img_path, det=False, rec=False, cls=True)
for line in result:
print(line)
img = cv2.imread(img_path)
plt.imshow(img[...,::-1])
plt.show()
import cv2
import os
import matplotlib.pyplot as plt
from paddleocr import PaddleOCR, draw_ocr
# PaddleOCR目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
ocr = PaddleOCR(use_angle_cls=True, lang="ch", use_gpu=False) # need to run only once to download and load model into memory
save_results = []
img_path = 'images/003.jpg'
save_dir = 'ocr_result'
result = ocr.ocr(img_path, cls=True)[0]
# 将结果写入文件
with open(
os.path.join(save_dir, "003_result.txt"),
'w',
encoding='utf-8') as f:
for line in result:
f.writelines(str(line)+'\n')
print(line)
# 显示结果
from PIL import Image
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='./fonts/simfang.ttf')
cv2.imwrite(os.path.join(save_dir, "003_result.jpg"), im_show)
plt.figure(figsize=(15, 8))
plt.imshow(im_show)
plt.show()
下载源码,并解压:http://gitee.com/paddlepaddle/PaddleOCR/tree/release/2.6
http://gitee.com/paddlepaddle/PaddleOCR/blob/release/2.6/requirements.txt
将文件 requirements.txt 保存到运行目录下如 D:\OpenSource\PaddlePaddle\PaddleOCR-release-2.6
shapely
scikit-image
imgaug
pyclipper
lmdb
tqdm
numpy
visualdl
rapidfuzz
opencv-python==4.6.0.66
opencv-contrib-python==4.6.0.66
cython
lxml
premailer
openpyxl
attrdict
Polygon3
lanms-neo==1.0.2
PyMuPDF<1.21.0
安装运行所需要的包
D:\OpenSource\PaddlePaddle\PaddleOCR-release-2.6>pip install -r requirements.txt -i http://pypi.tuna.tsinghua.edu.cn/simple --verbose
D:\OpenSource\PaddlePaddle\PaddleOCR-release-2.6>pip install paddlenlp -i http://pypi.tuna.tsinghua.edu.cn/simple --verbose
PaddleOCR中,在基于文字检测模型进行推理时,需要通过参数image_dir
指定单张图像或者图像集合的路径、参数det_model_dir
, 指定检测的 inference
模型路径。
百度OCR源码中提供了样例图片:http://gitee.com/paddlepaddle/PaddleOCR/tree/release/2.6/doc/imgs
import cv2
import matplotlib.pyplot as plt
import numpy as np
import os
# 选择2张图像可视化
img1 = cv2.imread("doc/imgs/00006737.jpg")
img2 = cv2.imread("doc/imgs/00056221.jpg")
plt.figure(figsize=(15, 6))
plt.subplot(1, 2, 1) # 定义 1行2列
plt.imshow(img1[:, :, ::-1]) # 第1列 放 img1 ,::-1 => axis 3 倒序
plt.subplot(1, 2, 2) # 定义 1行2列
plt.imshow(img2[:, :, ::-1]) # 第2列 放 img1
plt.show()
下载模型:http://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv3_det_infer.tar
解压放至:inference
目录
如果您希望导出自己训练得到的模型,使用Paddle Inference部署,那么可以使用下面的命令将预训练模型使用动转静的方法,转化为推理模型。
# 参考代码
# http://github.com/PaddlePaddle/PaddleOCR/blob/release/2.4/tools/export_model.py
# 下载预训练模型(V2)
wget http://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_distill_train.tar && tar -xf ch_PP-OCRv2_det_distill_train.tar && rm ch_PP-OCRv2_det_distill_train.tar
# 导出推理模型(V2)
python tools/export_model.py -c configs/det/ch_PP-OCRv2/ch_PP-OCRv2_det_cml.yml \
-o Global.pretrained_model="ch_PP-OCRv2_det_distill_train/best_accuracy" \
Global.save_inference_dir="./my_model"
CMD 进到代码目录如图
使用V3模型预测
# 预测
python tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/ch_PP-OCRv3_det_infer" --use_gpu=False
输出
PaddleOCR-release-2.6\tools\infer\utility.py
doc\doc_ch\inference_args.md
PaddleOCR-release-2.6\tools\infer\predict_det.py
//TODO 现在还不知道这玩意具体是用来干嘛的。
将角度不正确的文字处理成正常方向的
http://www.paddlepaddle.org.cn/modelsDetail?modelId=17
下载模型:http://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
解压放至:inference
目录
# 预测
python tools/infer/predict_cls.py \
--image_dir="./doc/imgs_words/ch/word_1.jpg" \
--cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer" \
--use_gpu=False
方向分类器的具体实现代码: PaddleOCR-release-2.6\tools\infer\predict_cls.py
http://www.paddlepaddle.org.cn/modelsDetail?modelId=17
下载模型:http://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar
解压放至:inference
目录
# 预测
python tools/infer/predict_rec.py \
--image_dir="./doc/imgs_words/ch/word_4.jpg" \
--rec_model_dir="./inference/ch_PP-OCRv3_rec_infer" \
--use_gpu=False
文字识别的具体代码:PaddleOCR-release-2.6\tools\infer\predict_rec.py
在执行PP-OCR的系统推理时,需要通过参数image_dir
指定单张图像或者图像集合的路径、参数det_model_dir
, cls_model_dir
和 rec_model_dir
分别指定检测、方向分类和识别的 inference
模型路径。参数 use_angle_cls
用于控制是否启用方向分类模型。use_mp
表示是否使用多进程。total_process_num
表示在使用多进程时的进程数。
以图像文件 ./doc/imgs/00018069.jpg
为例,预测的原始图像如下。
# 预测
python tools/infer/predict_system.py \
--image_dir="./doc/imgs/00018069.jpg" \
--det_model_dir="./inference/ch_PP-OCRv3_det_infer/" \
--cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" \
--rec_model_dir="./inference/ch_PP-OCRv3_rec_infer/" \
--use_angle_cls=True
可视化识别结果默认保存到 ./inference_results
文件夹里面。
在图象中可视化出了检测框和识别结果,在上面的notebook中也打印出了具体的识别文件以及文件读取路径信息。
如果希望保存裁剪后的识别结果,可以将save_crop_res参数设置为True,最终结果保存在output
目录下,其中部分裁剪后图像如下所示。保存的结果可以用于后续的识别模型标注与训练。
python tools/infer/predict_system.py \
--image_dir="./doc/imgs/00018069.jpg" \
--det_model_dir="./inference/ch_PP-OCRv3_det_infer/" \
--cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" \
--rec_model_dir="./inference/ch_PP-OCRv3_rec_infer/" \
--use_angle_cls=True \
--save_crop_res=True
PP-OCRv3文字检测识别系统
PaddleOCR Github
PP-OCRv2预测部署实战 代码中 v2 改 v3
“回顾逝去的2021年,在疫情的“救火期”后平静的那段时间,部门迎来了一些变动。人来人去,来来往往,好在下半年逐渐趋于稳定。变化是永恒不变的真理。但也有不怎么变的工作职责,不管谁来,该做的事情还是得继续。为了闭环上半年发现的问题(集团红蓝演习中,暴露出单兵作战应急能力较弱),也为了让新人更快地融入部门,于是在下半年组织开展了“应急响应实战能力提升计划”专项课题,即:应急响应实战演习。”01—专项概要1.1面临问题随着内部安全建设愈加成熟,安全设备覆盖面、安全工具与安全平台功能愈加完善,安全工作分工也愈加细致。但同时导致在不借助平台能力的情况下,单兵动手能力变弱;遇到安全问题时,应急响应集中在几个人身上;…等一系列问题。比如:在红蓝演习中,攻击队通过外购系统的fastjson漏洞上传内存马,而没有被发现的事件就是最好证明。应急响应阶段,上机取日志进行分析花费大量时间;应急响应结果,最终也没有分析出攻击队从何而来。 事后复盘发现:团队成员过于依赖现有平台及工具,弱化了应急响应的基本功,严重影响面对真实攻击对抗时的动手能力。1.2寻找出路遵从“实战是检验动手能力的主要标准之一“的原则,利用
这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包。一、早期我们怎么进行数据库操作1、原理一般来说,Java应用程序访问数据库的过程是:①装载数据库驱动程序;②通过jdbc建立数据库连接;③访问数据库,执行sql语句;④断开数据库连接。2、代码PublicvoidFindAllUsers(){ //1、装载sqlserver驱动对象 DriverManager.registerDriver(newSQLServerDriver()); //2、通过JDBC建立数据库连接 Connectioncon=DriverManager.getConnection("jdbc:sqlserver://192.168.2.6:1433;DatabaseName=customer","sa","123"); //3、创建状态 Statementstate=con.createStatement(); //4、查询数据库并返回结果 ResultSetresult=state.execut
尽管存在prop和事件,有的时候你仍可能需要在JavaScript里直接访问一个子组件。为了达到这个目的,你可以通过 ref 特性为这个子组件赋予一个ID引用。ref可以用在普通的Dom元素上,也可以用在父级组件上,还可以用在子组件上,通过this.$refs对象访问,一、加在普通DOM元素上,引用指向的就是DOM元素:<bodyclass=""> <divid="example1"> <inputtype="text"ref="input"id="inputId"/> <button@click="add">添加</button> </div> <scriptsrc="../js/vue.js"></script> <script> varexample1=newVue({ el:"#example1", metho
选自techcrunch作者:DevinColdewey机器之心编译大脑中神经元之间的信号传播速度大约是100米每秒,而光的传播速度是30万千米每秒,如果神经元信号也是光速传播的呢?来自加州大学洛杉矶分校(UCLA)的研究人员利用3D打印技术打印出了固态的神经网络,并且利用层级传播的光衍射来执行计算,实现了手写数字的图像识别,相关成果已发表在《science》杂志上。 这一想法看似新奇,其实也很自然。神经网络中执行的是线性运算,恰好和光衍射的线性相互作用对应,神经元的权重、激活值概念也能和光的振幅、相位对应(可调)。此外,固态光衍射计算还具有能耗小、无发热、光速执行(尽管传统计算机电路中的电场传播也是光速的,但并未直接对应神经网络的计算过程)等优点。该研究方向尚处于起步阶段,如果能充分利用其优势,也许会有很广阔的应用前景。如今,机器学习无处不在,但多数机器学习系统是隐形的:它们在「黑箱」里优化音频或识别图像中的人脸。但最近UCLA的研究人员研发出了一个3D打印AI分析系统。这一系统不仅看得见,还摸得着。与以往通过调节数字进行分析的系统不同,该系统通过光线的衍射来分析人工智能。这一新
一、首先建一个单个书签的类WebFavorite1 Public Name As String '定义书签类属性--名称 2 Public Url As String '定义书签类属性--网址 3 Public Sub Load()Sub Load(ByVal filename As String) '书签类Load方法 参数表示书签文件名如:书签名.url 4 5 Dim strData As String 6 Dim strLines() As String 7 Dim strLine As String 8 Dim objFileInfo As New FileInfo(filename) 9 Name = objFileInfo.Name.Substring(0, objFileInfo.Name.Length - objFileInfo.Extension.Length) 10 Try 11 strDa
1MIT用电视剧训练AI预测未来本周,MIT计算机科学与人工智能实验室(CSAIL)在计算机视觉和预测上获得重大突破,开发出一种算法,可更准确地预测人际交往中,参与者下一步的动作,比如是拥抱、握手还是亲吻对方。该算法使用Youtube和电视剧进行训练,样本包括《办公室》和《绝望主妇》,他不仅可以预测主角在下一秒的动作,还可以预测5秒之后,视频画面上最可能会出现什么东西。来源:MITNEWS2特斯拉计划收购SolarCity特斯拉(Tesla)正计划收购太阳能板制造商太阳城公司(SolarCity),但最终结果将由两家公司的股东决定。据BizJournals6月21日报导,这项并购案总额约在25亿至30亿美元之间,较SolarCity周二最新收盘价($21.19)溢价近30%。但在特斯拉欲收购SolarCity的消息一出后,SolarCity盘后股价马上攀升22%。不过,特斯拉的股价却在盘后交易中下跌12%。消息发布前,特斯拉的股价为$219.61,总市值约为320亿美元。Tesla欲收购SolarCity,ElonMusk称Tesla未来业务将包括汽车、电池和太阳能三部分,此次收购将使
2013年,腾讯公司联合中国计算机学会(CCF)首次发起“犀牛鸟科研基金”项目,引起了青年学者的积极关注,共收到来自国内外80多所高校/科研机构的170多份申请。2014年犀牛鸟基金在学界树立良好口碑,加入人工智能专项、互联网金融和移动互联网等产学研热议方向,引入腾讯云大规模计算集群资源平台(TOD-TencentOpenData),并提供“创意基金“作为犀牛鸟“科研基金”的补充,共收到来自海内外重点高校的162份申请,从申报者的背景经历、项目的价值意义、内容的创新可行性等多维度考量,项目申报均达到优质水平,充分体现出青年学者视野的前瞻性、跨领域的融合性及创新科研的引领性。2013CCF-腾讯犀牛鸟科研基金结题答辩会将于10月25日在中国计算机大会(CNCC2014)期间举行。首届获奖项目经过一年的沟通、合作以及基于海量数据和真实需求的研发,已取得阶段性成果。了解项目进展、洞察创新观点、为青年学者喝彩,从参与投票活动开始!目前已有800余位用户参与了投票活动,基金项目收获了更广泛的关注、更多的称赞和祝福。下面展示目前得票前三名的项目,完整项目列表及参与方法请点击页面底部的阅读原文查看哦
因为http会话的无状态性,为了标记用户的登录状态,便出现了cookie。cookie分为很多种,有普通cookie、签名cookie、jsoncookie等,这里主要记录下在express应用中如何配置使用cookie及session。cookie、session的区别:cookie数据存放在客户的浏览器上,session数据放在服务器上。cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。所以建议:将登陆信息等重要信息存放为session、其他信息如果需要保留,可以放在cookie中cookie首先是app.js中的配置:... varcookieParser=require('cookie-parser'); varbodyParser=require('body-par
参考博文 C++RAII机制详解:https://blog.csdn.net/yyxyong/article/details/76099721 现代C++:一文读懂智能指针:https://zhuanlan.zhihu.com/p/150555165 假设没有智能指针会怎么样 在介绍智能指针之前,先介绍C++11中的RAII机制 RAII是resourceacquisitionisinitialization的缩写,意为“资源获取即初始化”。它是C++之父BjarneStroustrup提出的设计理念,其核心是把资源和对象的生命周期绑定,对象创建获取资源,对象销毁释放资源。在RAII的指导下,C++把底层的资源管理问题提升到了对象生命周期管理的更高层次。 RAII机制? 使用C++时,最让人头疼的便是内存管理,但却又正是对内存高度的可操作性给了C++程序猿极大的自由与装逼资本。 当我们new出一块内存空间,在使用完之后,如果不使用delete来释放这块资源则将导致内存泄露,这在中大型项目中是极具破坏性的。但是人无完人,我们并不能保证每次都记得释放无法再次获取到且不再使用的内存,
1、缓冲区溢出攻击 实质上,溢出类攻击是由于将太多的数据放入原始程序设计人员认为足够的空间中导致的。额外的数据溢出到预期存储区附近的内存中,并且覆盖与该区域的原始用途无关的数据。当执行余下的程序时,它使用新被覆盖的数据。 避免:开发应用程序时利用“安全”库6,使用堆栈保护7(也就是,StackGuard8)或对输入数据进行检查,从而确保其是适当的大小或类型。 2、DDos分布式拒绝服务攻击 分布式拒绝服务攻击英文缩写即"Ddos",指以分散攻击源来黑进指定网站的黑客方式。DdoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。DdoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项指标不高的性能,它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了-目标对恶意攻击包的"消化能力"加强了不少。这时候分布
Java内部类其实在J2EE编程中使用较少,不过在窗口应用编程中特别常见,主要用来事件的处理。其实,做非GUI编程,内部类完全可以不用。 内部类的声明、访问控制等于外部类有所不同,要灵活使用内部类来编写程序,还是有相当难度的,Java发明了这种难懂的玩意儿,在其他语言中是没有的,但是在Java中,内部类也相当的重要,尤其做GUI开发时候,事件的响应处理全靠内部类了。 内部类所做的功能使用外部类也同样可以实现,只是有时候内部类做的更巧妙些。 内部类按照其所在位置不同,可分为以下几种: 1、(普通的)内部类(最常见的内部类,内部类的定义与类成员平级,)2、方法内部类3、匿名类4、静态内部类5、接口内部类 一、内部类声明与访问 1、内部类直接在类的内部进行声明。可以声明为private、protected、public或者默认访问权限,这个访问权限约定和外部类完全一样。 2、内部类自动拥有对其外围类所有成员(方法、属性)的访问权。如果内部类和外部类成员的名字完全相同,在内部类方法中要访问外部类成员,则需要使用
闲着没事,写了个高斯模糊的shader,有用的到的可以mark Shader"Unlit/GaussionBlur" { Properties { _MainTex("Texture",2D)="white"{} //值越大,正态分布图像越扁,距离远的像素的权重越高,颗粒感越明显 _Sigma("Sigma",Range(1,30))=20 //多少倍的Sigma,值越大,采样越多,越细腻,会循环(2n+1)(2n+1)次,所以这个值不要太大,太大也没用 _Ratio("SigmaRatio",Range(1,4))=2 } SubShader { Tags{"RenderType"="Opaque"} LOD100 Pass { CGPROGRAM #pragmavertexvert #pragmafragmentfrag //makefogwork #pragmamulti_compile_fog #include"UnityCG.cginc" structappdata { float4vertex:POSITION; float2uv:TEXCOORD0; };
安装Getlab https://www.cnblogs.com/wenwei-blog/p/5861450.html 安装以这个为准https://blog.csdn.net/weixin_38489509/article/details/126034654 替换默认22端口 https://www.csdn.net/tags/MtzakgxsMjg4MjctYmxvZwO0O0OO0O0O.html 安装Java环境 https://blog.csdn.net/qq_36133698/article/details/115018459 安装Redis https://baijiahao.baidu.com/s?id=1722728002073366376&wfr=spider&for=pc
主构造 主构造直接写在类名后面 classTestClass(_name:String){ }这里的_name是构造函数自己的参数,并不是成员变量,在类中其他方法也无法使用,需要给他赋值,最简单的赋值方式: classTestClass(privatevalname:String){funsetText(){println(name)}}这里相当于调用了给成员变量name赋值的方法,是一种省略写法 次构造Kotlin通过次构造的方式实现类似Java构造方法重载的效果,次构造关键字constructor,次构造必须先调用主构造。gander:String="男"这里给了默认参数,这也是Kotlin的一个优势,如果不传这个参数就是用默认值。如果所有参数都有默认值TestClass()优先调用主构造 classTestClass(privatevalname:String){ //两个参数的次构造constructor(name:String,gander:String):this(name) //三个参数的次构造constructor(name:String,gander:String="
mplementafirstinfirstout(FIFO)queueusingonlytwostacks.Theimplementedqueueshouldsupportallthefunctionsofanormalqueue(push,peek,pop,andempty). ImplementtheMyQueueclass: voidpush(intx)Pusheselementxtothebackofthequeue. intpop()Removestheelementfromthefrontofthequeueandreturnsit. intpeek()Returnstheelementatthefrontofthequeue. booleanempty()Returnstrueifthequeueisempty,falseotherwise. Notes: Youmustuseonlystandardoperationsofastack,whichmeansonlypushtotop,peek/popfromtop,size,andisemptyoperationsar
http://pywonderland.com/pattern-ocurrence/ 上面这篇文章写得特别好。 这块可能比较难理解。首先明确的是τ是赌博团伙向这个赌博游戏投入的全部成本,因为团伙是每天派一个人带着一元钱去,所以第τ天就总共投入了τ元钱。 Xτ就是赌博团伙在这个游戏中获得总的净收益,就是W-τ。然后就是一个宏观的理解,最开始也说了,这是一个公平游戏,不用考虑赌博团伙每天要派一个人这种问题,就考虑每个赌徒,他拿着一元钱去玩这个游戏,有1/2的概率赢1元钱,1/2的概率亏1元钱,1=1/2*2+1/2*0,对于赌场和赌徒来说这是个公平的游戏,所以W-τ就是一个鞅。 再考虑这道题:扔一个骰子,出现序列6565的期望次数是多少。 这道题和扔硬币是很像的,但注意就是要构造一个公平游戏。对于扔骰子,每次出现要的数的概率是1/6,出现不要的数是5/6。那么为了让期望是0,也就是游戏对于赌徒和赌场而言是公平的,就需要更高的回报,也就是赌徒投入x元钱,如果出现了他要的数字,他就可以拿到6x元,否则得到0元。1=1/6*6+5/6*0。所以最后的答案也就是把本来的
一、概念介绍 素数又称为质数。一个大于1的自然数(从2开始),除了1和它本身外,不能被其他自然数整除的叫做素数,否则称为合数。 0和1既不是素数也不是合数,最小的素数是2。 二、代码 方法一: boolis_Prime(intnum){ inti; for(i=2;i<=sqrt(num);i++){ if(num%i==0)//一旦发现有因子,则返回false returnfalse; } returntrue; }复制 注意:在for循环判断时不能忘记i<=sqrt(num)的等号,因为假设p*p=n,n的因子是可以取到sqrt(n)的,如判断9是不是素数,如果没有等号会出现9是素数,而实际上9不是素数。 方法二: 关于质数分布的规律:大于等于5的质数一定和6的倍数相邻。例如5和7,11和13,17和19等等; 证明:令x≥1,将大于等于5的自然数表示如下: ···6x-1,6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1··· 可以看到,不和6的倍数相邻的数为6x+2,6x+3,6x+4,由于2(3x+1)
文章目录 这是我总结的Java8日期工具类,应该是比较全面的,满足日常开发绝大部分需求,分享给大家,有错误之处,还望大神指教。 /** *Java8日期时间工具类 * *@authorJourWon *@date2020/12/13 */ publicclassLocalDateUtils{ /** *显示年月日时分秒,例如2015-08-1109:51:53. */ publicstaticfinalStringDATETIME_PATTERN="yyyy-MM-ddHH:mm:ss"; /** *仅显示年月日,例如2015-08-11. */ publicstaticfinalStringDATE_PATTERN="yyyy-MM-dd"; /** *仅显示时分秒,例如09:51:53. */ publicstaticfinalStringTIME_PATTERN="HH:mm:ss"; /** *显示年月日时分秒(无符号),例如20150811095153. */ publicstaticfinalStringUNSIGNED_DATETIME_PATTERN="yyyy
Kali-linux攻击WordPress和其他应用程序 今天越来越多的企业利用SAAS(SoftwareasaService)工具应用在他们的业务中。例如,他们经常使用WordPress作为他们网站的内容管理系统,或者在局域网中使用Drupal框架。从这些应用程序中找到漏洞,是非常有价值的。 为了收集用于测试的应用程序,TurnkeyLinux是一个非常好的资源。Turnkey工具的官方网站是http://www.turnkeylinux.org。本节将下载最流行的WordPress TurnkeyLinux发行版。 3.2.1获取WordPress应用程序 获取WordPress应用程序的具体操作步骤如下所示。 (1)在浏览器中输入http://www.turnkeylinux.org地址,打开的界面如图3.8所示。从该界面下载TurnkeyLinux。 图3.8Turnkey主页 (2)在该页面列出了许多程序,可以通过向下滚动鼠标查看。由于篇幅的原因,图3.8只截取了一少部分内容。在该页面中,用户可以尝试使用各种软件查找漏洞,并通过工
目录makefileC语言中的输入输出文件的读写文件的打开文件的操作文件的关闭标准输入输出枚举类型的输出C语言动态内存的分配和释放C++中的文件读写文本文件的读写二进制文件的读写C++动态内存的分配和释放C++类C++类的一般组成部分C++类的访问修饰符C++类的有元(有元函数/有元类)C++类的声明和定义(函数和静态属性)C++类的创建C++类的使用C++类对象的返回C++隐式构造函数和显式构造函数C++类型转换C++之QT最基本的QT程序QT的HelloWorld程序QT中QWidget的子类QT之布局QT之信号和槽Qt之QMainWindowC++之string类对象的构造find函数substr函数SLT容器vectorvector对象的创建vector对象的迭代器(指针)vector对象中元素的访问vector对象的遍历增加元素删除元素mapmap的创建map的迭代器map的元素map访问key对应的value插入访问删除查询set创建插入删除查找集合运算queue创建插入删除查看遍历stack创建插入删除查看遍历 makefile makefile和make的关系 mak