在做实验的过程中,往往需要将图片和预测的内容输出,从而对模型的的性能有更好的判断。
如果将训练集所有图片都放到jupyter中,肯定是放不下的,就算放下了浏览器也会卡死。所以我想将预测的图片和一些测试需要的文字提取放到pdf中去。
参考:stackoverflow、user guide 第5.2节
官方文档给出的例子只能从文件到pdf
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.rl_config import defaultPageSize
from reportlab.lib.units import inch
import PIL
import os
from PIL import Image as PILimage
from io import StringIO
from io import BytesIO
PAGE_HEIGHT=defaultPageSize[1]; PAGE_WIDTH=defaultPageSize[0]
styles = getSampleStyleSheet()
Title = "Hello world"
pageinfo = "platypus example"
def myFirstPage(canvas, doc):
canvas.saveState()
canvas.setFont('Times-Bold',16)
canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-108, Title)
canvas.setFont('Times-Roman',9)
canvas.drawString(inch, 0.75 * inch, "First Page / %s" % pageinfo)
canvas.restoreState()
def myLaterPages(canvas, doc):
canvas.saveState()
canvas.setFont('Times-Roman',9)
canvas.drawString(inch, 0.75 * inch, "Page %d %s" % (doc.page, pageinfo))
canvas.restoreState()
def go():
doc = SimpleDocTemplate("test.pdf")
Story = [Spacer(1,2*inch)]
style = styles["Normal"]
pngs = [x for x in os.listdir(保存图片的文件夹路径) if 'png' in x]
for i in pngs:
txt = os.path.join(预测结果的路径, i.replace('.png','.txt'))
png = os.path.join(保存图片的文件夹路径, i)
f = open(txt, 'r')
s = str(f.readlines())
bogustext = s
p = Paragraph(bogustext, style)
Story.append(p)
# png = cv2.imread(png)
# 从PIL保存到PDF,在不适合从文件读取图片的场景中可以使用
img2 = BytesIO()
pil = PIL.Image.open(png)
pil.save(img2, 'PNG')
img2.seek(0)
Story.append(Image(img2))
Story.append(Spacer(1,0.2*inch))
doc.build(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages)
if __name__ == '__main__':
go()
在reportlab中,是可以直接从文件读取图片的,不需要使用pil这个步骤,但是我们在实际使用图片的时候,往往不一定会从文件读取,因为数据增强时会涉及到图片变形,所以希望能够直接从内存保存到图片中。这里给出的示范可以将PIL转到pdf中。
PIL本身就可以保存到pdf
imglist[0].save('test.pdf', resolution=100.0, all_save=True, append_images = imglist[1:])`
但是我在用这个代码的时候不管怎么改它都只能保存一张图片,就放弃了这种方法。