diff --git a/apps/develop/views.py b/apps/develop/views.py index aeba9d7c..7f8fffab 100755 --- a/apps/develop/views.py +++ b/apps/develop/views.py @@ -193,6 +193,20 @@ class CorrectViewSet(CustomGenericViewSet): item.shift = item.sflog.shift item.save() return Response() + + # @action(methods=['post'], detail=False, serializer_class=Serializer) + # def global_img_compressed(self, request, pk=None): + # """矫正全景压缩照片 + + # 矫正全景压缩照片 + # """ + # from apps.ecm.models import Event + # events = Event.object.filter(global_img_compressed=None).exclude(glboal_img=None) + # for event in events: + # path, end= event.global_img.split('.') + # event.global_img_compressed = path + '_compressed.' + end + # event.save() + # return Response() class TestViewSet(CustomGenericViewSet): authentication_classes = () diff --git a/apps/ecm/migrations/0011_event_global_img_compressed.py b/apps/ecm/migrations/0011_event_global_img_compressed.py new file mode 100644 index 00000000..27622259 --- /dev/null +++ b/apps/ecm/migrations/0011_event_global_img_compressed.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2023-08-22 02:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ecm', '0010_alter_eventcate_code'), + ] + + operations = [ + migrations.AddField( + model_name='event', + name='global_img_compressed', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='全景照压缩'), + ), + ] diff --git a/apps/ecm/models.py b/apps/ecm/models.py index 7a7a6d04..a05a9332 100644 --- a/apps/ecm/models.py +++ b/apps/ecm/models.py @@ -83,6 +83,7 @@ class Event(CommonBDModel): cates = models.ManyToManyField(EventCate, verbose_name='关联事件种类', through='ecm.eventdo', related_name='event_cates') face_img = models.CharField('人脸照', max_length=1000, null=True, blank=True) global_img = models.CharField('全景照', max_length=1000, null=True, blank=True) + global_img_compressed = models.CharField('全景照压缩', max_length=1000, null=True, blank=True) area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.SET_NULL, null=True, blank=True) vchannel = models.ForeignKey(TDevice, verbose_name='抓拍设备', on_delete=models.SET_NULL, null=True, blank=True) location = models.JSONField('事件点位坐标', default=dict, null=False, blank=True) diff --git a/apps/ecm/service.py b/apps/ecm/service.py index 15164a58..497b170d 100644 --- a/apps/ecm/service.py +++ b/apps/ecm/service.py @@ -59,10 +59,16 @@ def save_dahua_pic(pic_url: str, save_path: str = '/media/'): os.makedirs(full_path) with open(full_path + file_name, 'wb') as f: f.write(res.content) - full_path_file = full_path + file_name - compress_image(full_path_file) return path + file_name +def compress_global_img(path_file): + full_path_file = settings.BASE_DIR + path_file + try: + out_file, _ = compress_image(full_path_file) + return out_file.replace(settings.BASE_DIR, '') + except: + myLogger.error(f'图片压缩失败-{full_path_file}', exc_info=True) + return None def get_ep_default(): """返回人员默认位置信息 @@ -345,6 +351,7 @@ def dispatch_dahua_event(data: dict): if cates: event = Event() event.global_img = ec_codes['global_img'] if ec_codes.get('global_img', None) else save_dahua_pic(global_img_o) + event.global_img_compressed = compress_global_img(event.global_img) if face_img_o: event.face_img = save_dahua_pic(face_img_o) event.area = area @@ -657,6 +664,7 @@ def snap_and_analyse(vchannel: TDevice, algo_codes: list, opl: Opl = None): event = Event() event.global_img = ec_codes['global_img'] if ec_codes.get('global_img', None) else save_dahua_pic(global_img_o) + event.global_img_compressed = compress_global_img(event.global_img) event.vchannel = vchannel event.area = vchannel.area event.obj_cate = obj_cate diff --git a/apps/ecm/tasks.py b/apps/ecm/tasks.py index b2ee03a8..29d00bd3 100644 --- a/apps/ecm/tasks.py +++ b/apps/ecm/tasks.py @@ -197,7 +197,9 @@ def monitor_and_analyse(vchannel_code: str, algo_codes: list): @shared_task(base=CustomTask) def compressed_all_ecm_image(): + from apps.ecm.service import compress_global_img events = Event.objects.exclude(global_img=None) for event in events: - if event.global_img: - compress_image(settings.BASE_DIR + event.global_img) \ No newline at end of file + if event.global_img and event.global_img_compressed is None: + event.global_img_compressed = compress_global_img(event.global_img) + event.save() \ No newline at end of file diff --git a/apps/ecm/views.py b/apps/ecm/views.py index 47a3b451..041f2f45 100644 --- a/apps/ecm/views.py +++ b/apps/ecm/views.py @@ -185,9 +185,6 @@ class EventViewSet(ListModelMixin, RetrieveModelMixin, DestroyModelMixin, Custom cates_str = '' for m in i['cates_']: cates_str = cates_str + m['name'] + '/' - if i['global_img']: - path, end = i['global_img'].split('.') - i['global_img_compressed'] = path + '_compressed.' + end data.append( [ cates_str,