我试图找出word文档中是否存在字体为2的任何内容.但是,我无法做到这一点.首先,我试图读取样本word文档中每个单词的字体,该单词只有一行和7个单词.我没有得到正确的结果.
这是我的代码:
HWPFDocument doc = new HWPFDocument (fileStream);
WordExtractor we = new WordExtractor(doc);
Range range = doc.getRange()
String[] paragraphs = we.getParagraphText();
for (int i = 0; i < paragraphs.length; i++) {
Paragraph pr = range.getParagraph(i);
int k = 0
while (true) {
CharacterRun run = pr.getCharacterRun(k++);
System.out.println("Color: " + run.getColor());
System.out.println("Font: " + run.getFontName());
System.out.println("Font Size: " + run.getFontSize());
if (run.getEndOffSet() == pr.getEndOffSet())
break;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码总是使字体大小加倍.即,如果文档中的实际字体大小为12,则输出24,如果实际字体为8,则输出16.
这是从word文档读取字体大小的正确方法吗?
我有这样的示例图像
我正在寻找一种方法来消除图像中的噪音,这样我最终得到的图像在白色背景上只有黑色文字,这样我就可以将它发送到tesseract.
我试过变形了
kernel = np.ones((4,4),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow("opening", opening)
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.
我也试图找到轮廓
img = cv2.cvtColor(rotated, cv2.COLOR_BGR2GRAY)
(cnts, _) = cv2.findContours(img, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:1]
for c in cnts:
x,y,w,h = cv2.boundingRect(c)
roi=rotated[y:y+h,x:x+w].copy()
cv2.imwrite("roi.png", roi)
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,我得到以下轮廓:
裁剪时会导致此图像:
这还不够好.我想要在白色背景上的黑色文字,以便我可以将它发送到tesseract OCR并具有良好的成功率.
还有什么我可以尝试的吗?
更新
这是一个额外的类似图像.这个有点容易,因为它有一个光滑的矩形
我试图在我的Jenkins文件中通过RVM使用ruby版本,如下所示:
sh 'rvm use ruby 2.3.1'
Run Code Online (Sandbox Code Playgroud)
但是,我相信上面的命令没有按预期执行,因为我收到此消息后
+ rvm use ruby 2.3.1
RVM is not a function, selecting rubies with 'rvm use ...' will not work.
Run Code Online (Sandbox Code Playgroud)
我读了其他答案,建议添加#!/bin/bash -xl,但是,我使用的是Jenkinsfile而不是bash脚本.
有办法解决这个问题吗?我只想将ruby设置为2.3.1然后运行一个命令.
我也试过使用create default但仍然打印的ruby版本是2.0.0
sh '''
#!/bin/bash -xl
echo $PATH
rvm install ruby-2.3.1
rvm alias create default 2.3.1 && ruby --version
ruby --version
'''
Run Code Online (Sandbox Code Playgroud) 我有一个案例类列表.我想从列表中获取特定项目.
我做
myList.filter(_.id == myobject.id)(0)
Run Code Online (Sandbox Code Playgroud)
当filter实际返回某些东西时,这将起作用.但是当过滤器没有返回任何内容时,我得到索引超出绑定的异常.
scala> case class Color (id: Int, name: String)
defined class Color
scala> val myList1 = List[Color](Color(1, "red"), Color(2, "green"), Color(3, "blue"))
myList1: List[Color] = List(Color(1,red), Color(2,green), Color(3,blue))
scala> val toFind1 = Color(10, "white")
toFind1: Color = Color(10,white)
scala> myList1.filter(_.id == toFind1.id)(0)
java.lang.IndexOutOfBoundsException: 0
Run Code Online (Sandbox Code Playgroud) 我目前有一个填充 JS 数组的数据列表,如下所示:
var infoWindowContent = [
<div data-sly-use.ed="Foo"
data-sly-list="${ed.allassets}"
data-sly-unwrap>
['<div class="info_content">' +
'<h3>${item.assettitle @ context='unsafe'}</h3> ' +
'<p>${item.assettext @ context='unsafe'} </p>' + '</div>'],
</div>
];
Run Code Online (Sandbox Code Playgroud)
我需要在这个数组中添加一些逻辑。如果assetFormat属性是“text/html”,那么我想打印<p>标签。如果assetFormat属性是image/png那么我想打印img标签。
我的目标是这样的。这有可能实现吗?
var infoWindowContent = [
<div data-sly-use.ed="Foo"
data-sly-list="${ed.allassets}"
data-sly-unwrap>
['<div class="info_content">' +
'<h3>${item.assettitle @ context='unsafe'}</h3> ' +
if (assetFormat == "image/png")
'<img src="${item.assetImgLink}</img>'
else if (assetFormat == "text/html")
'<p>${item.assettext @ context='unsafe'}</p>'
+ '</div>'],
</div>
];
Run Code Online (Sandbox Code Playgroud) 我正在我的应用程序management/commands目录下编写自定义 django 命令。目前我在该目录中有 6 个不同的文件。每个文件都有一个不同的命令来解决一个独特的需求。但是,有一些实用程序对所有这些实用程序都是通用的。抽象出这个通用代码的最佳方法是什么?
下面是一个例子:
load_colors
class Command(BaseCommand):
def handle(self, *args, **options)
....code unique to colors
def check_validity(self, color)
....#code common to both shades and colors
Run Code Online (Sandbox Code Playgroud)
load_shades
class Command(BaseCommand):
def handle(self, *args, **options)
....#code unique to shades
def check_validity(self, color)
....#code common to both shades and colors
Run Code Online (Sandbox Code Playgroud) 我使用opencv_contrib来检测图像中的文本区域.
这是原始图像
这是找到文本区域后的图像:
可以看出,图像中存在重叠的组.例如,似乎是围绕两个组Hello World和两个绕Some more sample text
问题
在这样的场景中,如何通过合并两个框来保持最宽的框.对于这些例子,它将以一个开始H和结束的方式d覆盖Hello World.我这样做的原因是我想裁剪这部分图像并将其发送给tesseract.
这是绘制框的相关代码.
void groups_draw(Mat &src, vector<Rect> &groups)
{
for (int i=(int)groups.size()-1; i>=0; i--)
{
if (src.type() == CV_8UC3)
rectangle(src,groups.at(i).tl(),groups.at(i).br(),Scalar( 0, 255, 255 ), 2, 8 );
}
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的.我的想法在评论中.
void groups_draw(Mat &src, vector<Rect> &groups)
{
int previous_tl_x = 0;
int previous_tl_y = 0;
int prevoius_br_x = 0;
int previous_br_y = 0;
//sort the groups from lowest to largest.
for …Run Code Online (Sandbox Code Playgroud) 我的目标是从 S3 获取一个对象(图像),更改文件的元数据,并将其替换为已更改元数据的新文件。
为了更改元数据,我使用的是commons 图像库。我对下面的示例进行了编码,该示例按预期工作,但不处理 S3。
File newFile = new File("newImage2.jpg");
OutputStream os = new BufferedOutputStream(new FileOutputStream(newFile))
InputStream isNew = new BufferedInputStream(new FileInputStream(newFile))
InputStream is = new BufferedInputStream(new FileInputStream(new File("newImage.jpg")))
try {
String xmpXml = "<x:xmpmeta>" +
"\n<Lifeshare>" +
"\n\t<Date>"+"some date"+"</Date>" +
"\n\t<Latitude>"+"somelat"+"</Latitude>" +
"\n\t<Longitude>"+"somelong"+"</Longitude>" +
"\n\t<Altitude>"+"somealt"+"</Altitude>" +
"\n\t<Z>"+"someZ"+"</Z>" +
"\n\t<X>"+"someX"+"</X>" +
"\n\t<Y>"+"Some y"+"</Y>" +
"\n</Lifeshare>" +
"\n</x:xmpmeta>";
JpegXmpRewriter rewriter = new JpegXmpRewriter();
rewriter.updateXmpXml(is,os, xmpXml);
String newXmpXml = Imaging.getXmpXml(isNew, "newImage2.jpg");
println newXmpXml
}
finally {
is.close()
os.close()
} …Run Code Online (Sandbox Code Playgroud) java image-processing amazon-s3 aws-java-sdk apache-commons-imaging
当我启动具有IAM角色的EC2实例时,我可以boto3在该EC2实例上使用,而不必指定aws访问和密钥,因为boto3 它们会自动读取它们.
>>> import boto3
>>> s3 = boto3.resource("s3")
>>> list(s3.buckets.all())[0]
s3.Bucket(name='my-bucket-name')
Run Code Online (Sandbox Code Playgroud)
题
我想知道是否有任何方法可以从boto3获取访问密钥和密钥?例如,如何使用打印到标准控制台print
如果我在 Python 中有这样的字符串,我该如何填充占位符?
s = """
uri1: %s/file1.txt
md5: %s
uri2: %s/file2.txt
md5: %s
uri3: %s/file3.txt
md5: %s
"""
Run Code Online (Sandbox Code Playgroud)
在uri将保持不变,但md5会改变。因此,对于上述情况,最终输出将是这样的:
uri1: file:///somepath/foo/file1.txt
md5: 1234
uri2: file:///somepath/foo/file2.txt
md5: 4321
uri3: file:///somepath/foo/file3.txt
md5: 9876
Run Code Online (Sandbox Code Playgroud)
我知道我可以填写每个%s但如果我不想每次都复制相同的变量怎么办?即我想避免这样做:
s = """
uri1: %s/file1.txt
md5: %s
uri2: %s/file2.txt
md5: %s
uri3: %s/file3.txt
md5: %s
""" % (self.URI, self.md5_for_1, self.URI, self.md5_for_2, self.URI, self.md5_for_3)
Run Code Online (Sandbox Code Playgroud)
在上面,我self.URI每次都必须指定......我想知道是否有一种方法可以只指定一次?