pdf与图片互相转换

1.pdf转图片

import os
import numpy as np
import cv2
from PIL import Image
Image.MAX_IMAGE_PIXELS=None
import tempfile
import time
import sys
from pdf2image import convert_from_bytes# # 预处理程序
# sys.path.append("./data_prepare")
# from data_prepare.batch_pdf2jpg import pdf2jpg, pdf2pil_imgs
# from data_prepare.batch_rectify import batch_rectify2, rectify_single_img_fast
# sys.path.append("./tools")
# from tools.img_tools import cv_resize_long_edge, pil_resize_long_edgedef cv_resize_long_edge(cv_img, long_edge_length):# resize the cv_image(height, width) = cv_img.shape[:2]max_len = max(width, height)if max_len == long_edge_length:return cv_imgratio = long_edge_length / max_lenimg = cv2.resize(cv_img, None, fx=ratio, fy=ratio, interpolation=cv2.INTER_LINEAR)return imgdef pil_resize_long_edge(pil_img, long_edge_length):# resize the imagewidth, height = pil_img.sizemax_len = max(width, height)if max_len == long_edge_length:return pil_imgratio = max_len / long_edge_lengthimg = pil_img.resize((round(width/ratio), round(height/ratio)), Image.ANTIALIAS)return imgclass PDF:def __init__(self, pdf_bytes, model, dpi=300, n_threads=4, save_img_dir="./tmp_ocr_dir", small_size=1280):st = time.time()with tempfile.TemporaryDirectory() as tmp_out:pil_imgs = convert_from_bytes(pdf_bytes, output_folder=tmp_out, dpi=dpi, fmt="jpg", thread_count=n_threads)print("pdf拆分用时: 共 %d 页用时: %.3fs" % (len(pil_imgs), time.time() - st))self.pages = []start = time.time()# print("deal with:", pdf_path, "output:", pdf_rst_dir)if save_img_dir is not None:os.makedirs(save_img_dir, exist_ok=True)for i, pil_img in enumerate(pil_imgs):page = {}cv_img = np.array(pil_img)# pil_img to cv_imgcv_img = cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB)# 限制最大尺寸max_size = 5000if max(cv_img.shape[:2]) > max_size:cv_img = cv_resize_long_edge(cv_img, max_size)if model is not None:# 使用方向分类模型cv_img_org = rectify_single_img_fast(model, cv_img)else:cv_img_org = cv_imgpage["ocv"] = cv_img_org# origin cv img# page["opil"] = Image.fromarray(cv2.cvtColor(cv_img_org, cv2.COLOR_BGR2RGB)) # origin pil img# page["scv"] = cv_resize_long_edge(cv_img_org, small_size) # small cv image# page["spil"] = pil_resize_long_edge(page["opil"], small_size) # small pil imageself.pages.append(page)if save_img_dir is not None:img_path = os.path.join(save_img_dir, "%d.jpg" % i)page["img_path"] = img_pathcv2.imwrite(img_path, page["ocv"])print("pdf初始化及矫正: 共 %d 页用时: %.3fs" % (len(self.pages), time.time() - start))def __getitem__(self, i):return self.pages[i]def __len__(self):return len(self.pages)if __name__ == '__main__':tmp_dir = "./test_img"if not os.path.exists(tmp_dir):os.mkdir(tmp_dir)path = './me_pdf'pdfs_list_path = [os.path.join(path,i) for i in os.listdir(path)]for i, pdf_list_path in enumerate(pdfs_list_path):# pdf_file_path = '../chengdu/bank_test.pdf'pdf_file_path = pdf_list_pathpdf_bin = open(pdf_file_path, 'rb').read()pdf = PDF(pdf_bin, model=None, save_img_dir=None, small_size=2000)pdf_rst = []for i, page in enumerate(pdf):# img = Image.fromarray(page['ocv'][..., ::-1])# img.save(os.path.join(tmp_dir, '{}.jpg'.format(i)), dpi=(300.0, 300.0), quality=100)img = page['ocv']name = pdf_list_path.split('/')[-1].split('.')[0]cv2.imwrite(os.path.join(tmp_dir, name + '_' + str(i)+'.jpg'), img)

2.图片转pdf

from reportlab.lib.pagesizes import A4, portrait, landscape
from reportlab.pdfgen import canvas
import os
import cv2
# imgs_path = './需要转换成pdf图片'
# imgs_list_path = [os.path.join(imgs_path,i) for i in os.listdir(imgs_path)]
# imgs_list_path = sorted(imgs_list_path)
# for i, img_list_path in enumerate(imgs_list_path):
#     if i<1:
#         print('img_list_path:', img_list_path)def convert_images_to_pdf(imgs_path, pdf_path):pages = 0(w, h) = portrait(A4)c = canvas.Canvas(pdf_path, pagesize = portrait(A4))# l = os.listdir(img_path)# l.sort(key= lambda x:int(x[:-4]))imgs_list_path = [os.path.join(imgs_path, i) for i in os.listdir(imgs_path)]imgs_list_path = sorted(imgs_list_path)for img_list_path in imgs_list_path:# f = img_path + os.sep + str(img_list_path)c.drawImage(img_list_path, 0, 0, w, h)c.showPage()pages = pages + 1c.save()if __name__ == '__main__':# imgs_path = './需要转换成pdf图片'# path = './测试数据集_给梧州'# path = './红头文件/样本文件_jpg'path = './红头文件/身份证pdf'dirs_list_path = [os.path.join(path, i) for i in os.listdir(path)]for i, dir_list_path in enumerate(dirs_list_path):# imgs_path ='./需要转换成pdf图片3'# pdf_path = './good.pdf'pdf_path = str(i+1)+'.pdf'convert_images_to_pdf(dir_list_path, pdf_path)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一小练——二项式系数加法解

上得厅堂&#xff0c;下得厨房&#xff0c;写得代码&#xff0c;翻得围墙&#xff0c;欢迎来到睿不可挡的每日一小练&#xff01; 题目&#xff1a;二项式系数加法解 内容&#xff1a;请编写一个程序&#xff0c;仅仅用加法&#xff0c;求出n中取r个组合系数C(n,r)&#xff0c;…

华为、苹果、高通,谁在领跑?全面解读清华AI芯片报告

来源&#xff1a;智东西摘要&#xff1a;本文全面讲解人工智能芯片&#xff0c;系统梳理人工智能芯片的发展现状及趋势。2010 年以来&#xff0c;由于大数据产业的发展&#xff0c;数据量呈现爆炸性增长态势&#xff0c;而传统的计算架构又无法支撑深度学习的大规模并行计算需求…

SSD300网络结构(pytorch)+多尺度训练与测试

一.SSD300 1.如图是预测框的相应feature map 这里smin是0.2&#xff0c;表示最底层的scale是0.2&#xff1b;smax是0.9&#xff0c;表示最高层的scale是0.9,m代表产生尺度预测的feature map个数。 其中anchor的长宽关系&#xff0c;s就是上图中的scale,a就是上图中的anchor …

01-08-02【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider...

第一步骤&#xff1a;hibernate.cfg.xml文件补上如下配置&#xff1a; <?xml version"1.0" encoding"utf-8"?> <!-- This template was written to work with NHibernate.Test. Copy the template to your NHibernate.Test project folder and…

2018, 自动驾驶异常艰难的一年

编译&#xff1a;张玺 &#xff0c;编辑&#xff1a;宇多田摘要&#xff1a;虽然文章几乎聚焦于美国硅谷的技术公司&#xff0c;但这并不意味着作者提出的种种问题不存在于中国的技术公司身上。有意思的是&#xff0c;作者批评了各大公司此前疯狂立 flag&#xff0c;却最后纷纷…

目标检测矩形框与polygon数据增加--裁剪,拓展,旋转

1.裁剪 import torch from torchvision import transforms import cv2 import numpy as np import types from numpy import random class RandomSampleCrop(object):"""CropArguments:img (Image): the image being input during trainingboxes (Tensor): th…

递归判断一个数是否递增

#include<iostream>using namespace std;//是否单调递增bool isdan(int a[],int lev,int len){ if(len1) return true; if(levlen-1) { return true; } else { if(a[lev]>a[lev1]) return false; else return isdan(a,lev1,len…

医生们说,AI不会取代我们!

来源&#xff1a;IEEE电气电子工程师学会每次人工智能在医疗任务中与医生进行竞争&#xff08;对此我们已经报道过很多次&#xff09;时&#xff0c;一个问题不可避免地浮出水面&#xff1a;人工智能会取代医生吗&#xff1f;如果你与AI 专家或硅谷投资者交谈&#xff0c;答案往…

ubuntu安装python3.5+pycharm+anaconda+opencv+docker+nvidia-docker+tensorflow+pytorch+Cmake3.8

一&#xff0c;切换python版本为3.5 装好ubuntu&#xff0c;python版本是2.7的 我自己安装并更改打开为python3.5 sudo apt-get install python3.5 设置优先级和默认环境&#xff1a; sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 su…

学界 | 量化深度强化学习算法的泛化能力

来源&#xff1a;AI 科技评论OpenAI 近期发布了一个新的训练环境 CoinRun&#xff0c;它提供了一个度量智能体将其学习经验活学活用到新情况的能力指标&#xff0c;而且还可以解决一项长期存在于强化学习中的疑难问题——即使是广受赞誉的强化算法在训练过程中也总是没有运用监…

C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]

面向对象编程--句柄类与继承[续]三、句柄的使用使用Sales_item对象能够更easy地编写书店应用程序。代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对象进行的调用的虚行为。1、比較两个Sales_item对象在编写函数计算销售总数之前,须要定义比較Sales_item对象…

《科学》评出2018年度十大科学突破事件

来源&#xff1a;科学大院《科学》杂志每年会评出在即将过去的一年里最为重要的十大科学突破&#xff08;Science Breakthrough&#xff09;。今年&#xff0c;夺得年度突破桂冠的是“单细胞水平细胞谱系追踪技术”&#xff0c;帮助破获多起悬案的法医系谱技术、#MeToo 运动等也…

递归理解以及时间复杂度计算

一.复杂度分析&#xff1a; 可以理解为递归的深度就是空间复杂度&#xff0c;时间复杂度就是O(T*depth),其中&#xff34;是每个递归函数的时间复杂度&#xff0c;depth是递归深度&#xff0e; #空间复杂度O(1) def sum1_(n):res 0for i in range(n1):resireturn res#递归 空…

性价比高出英特尔45%,亚马逊的云服务器芯片如何做到?| 解读

来源&#xff1a;TheNextPlatform编译&#xff1a;机器之能 张玺摘要&#xff1a;到目前为止&#xff0c;亚马逊和其他大型云运营商几乎全部使用英特尔的 Xeon 芯片。虽然在服务器芯片市场&#xff0c;英特尔市场占有率非常高&#xff0c;但亚马逊正使用折扣策略来赢得客户。亚…

将MyEclipse项目导入到Eclipse中

1.请首先确保你的eclipse是javaee版本的&#xff0c;或者已经安装wtp插件2.然后修改eclipse工程下的.project文件&#xff1a;3.在<natures></natures>中加入<nature>org.eclipse.wst.common.project.facet.core.nature</nature> <nature>org.e…

GIOU loss+DIOU loss+CIOU loss

一.IOU 1.GIOU解决没有交集的框,IOU为0,其损失函数导数为0,无法优化的问题。 图1 GIOU,IOU,l2范数差异 a)可看出 l2值一样,IOU值是不一样的,说明L1,L2这些Loss用于回归任务时&#xff0c;不能等价于最后用于评测检测的IoU. b)可看出当框有包含关系,GIOU就退化为IOU 其是找…

《科学》十大年度科学突破反映的新动向

来源&#xff1a;新华网摘要&#xff1a;从测定分子结构到宇宙探索&#xff0c;从发现远古动物到揭示细胞的秘密&#xff0c;美国权威学术刊物《科学》杂志评选的2018年十大科学突破&#xff0c;在时间和空间尺度上拓宽着人类认知的边界&#xff0c;也反映了近年来科学发展的三…

ctpn论文阅读与代码

代码地址: https://github.com/zonghaofan/ctpn_torch 1.通用的目标检测是封闭的,而文字是封闭且连续 2. 构造一系列宽度相等的小文本,回归中心y坐标和高度 3. 对于边界回归x坐标,在进一次修正 4.整个模型就是backbone提取特征,将每个像素点的相邻3*3像素拉成行向量,利用空间…

yum配置与使用

yum配置与使用(很详细) yum的配置一般有两种方式&#xff0c;一种是直接配置/etc目录下的yum.conf文件&#xff0c;另外一种是在/etc/yum.repos.d目录下增加.repo文件。一、yum的配置文件$ cat /etc/yum.conf [main]cachedir/var/cache/yum #yum下载的RPM包的缓存目录k…

新技术不断涌现,下一代云计算的突破口在哪里?

来源&#xff1a;日知录技术社区这是一个IT技术飞速发展的时代&#xff0c;在硬件基础设施的不断升级以及虚拟化网络等技术的日益成熟下&#xff0c;云厂商也正面临着各种新技术带来的巨大挑战。从数据中心的基础建设到云平台的系统构建再到产品底层的技术改革&#xff0c;该如…