我正在尝试使用 OpenCV 和 pytesseract 解决一些简单的验证码。一些验证码样本是:
我试图用一些过滤器去除嘈杂的点:
import cv2
import numpy as np
import pytesseract
img = cv2.imread(image_path)
_, img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
img = cv2.morphologyEx(img, cv2.MORPH_OPEN, np.ones((4, 4), np.uint8), iterations=1)
img = cv2.medianBlur(img, 3)
img = cv2.medianBlur(img, 3)
img = cv2.medianBlur(img, 3)
img = cv2.medianBlur(img, 3)
img = cv2.GaussianBlur(img, (5, 5), 0)
cv2.imwrite('res.png', img)
print(pytesseract.image_to_string('res.png'))
Run Code Online (Sandbox Code Playgroud)
结果转换后的图像是:
不幸的是,pytesseract 只能正确识别第一个验证码。还有其他更好的改造吗?
最终更新:
正如@Neil 所建议的那样,我尝试通过检测连接的像素来消除噪声。为了找到连接的像素,我找到了一个名为 的函数connectedComponentsWithStats
,它检测连接的像素并为组(组件)分配一个标签。通过查找连接组件并删除具有少量像素的组件,我设法使用 pytesseract 获得了更好的整体检测精度。
这是新的结果图像:
我正在使用WebPack CommonsChunkPlugin来提取重复的代码并减少JavaScript代码的大小.我有两个html页面和两个条目.我还添加了ReactJs供应商条目.到目前为止,在webpack.config.js中我们有:
var path = require("path");
var webpack = require('webpack');
var BundleTracker = require('webpack-bundle-tracker');
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
context: __dirname,
entry: {
react: ["react", "react-dom"],
home: './assets/js/home.jsx',
about: './assets/js/about.jsx',
},
output: {
path: path.resolve('./assets/bundles/'),
filename: "[name].js",
},
plugins: [
new BundleTracker({filename: './webpack-stats.json'}),
new webpack.optimize.CommonsChunkPlugin({
name: 'react',
minChunks: Infinity
}),
new BundleAnalyzerPlugin(),
],
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader',
options: {
plugins: [["lodash", { "id": ["semantic-ui-react"] }]], …
Run Code Online (Sandbox Code Playgroud) 根据Android开发者文档,如果调用应用程序使用与签名相同的密钥进行签名,则可以获得signature
应用程序中具有保护级别的权限。另外根据这个答案,具有保护级别的android权限不能被第三方应用程序获取,但在android开发人员文档中,有一个名为保护级别的权限。我见过很多代码在其代码中声明了此权限:A
B
A
signature
REQUEST_INSTALL_PACKAGES
signature
<uses-permission android:name="REQUEST_INSTALL_PACKAGES" />
Run Code Online (Sandbox Code Playgroud)
那怎么可能呢?少了什么东西?