Exemple d'usage simple ====================== - Importer le module OLIV .. code-block:: python import os import sys sys.path.append("/path/to/folder/velocimetry-api") from oliv import * - Charger une vidéo: .. code-block:: python lv_param = LoadVideoParams("../tmp/20231020_142415.mp4") my_video = video.from_file(lv_param) - Extraire une série d'images: .. code-block:: python ef_param = ExtractFrameParams(start_index=401, end_index=405, skip_index=1) my_frame_stack = video.extract_framestack(my_video, ef_param) - Créer, calibrer et vérifier une caméra avec la méthode DLT: .. code-block:: python my_grp = ortho.read_GRP_table(file_path="GRP.dat") my_dlt = ortho.projection_method(AvailableProjection.DLT, my_grp) dlt_stats = my_dlt.check() - Créer un mapping d'image à partir d'un ROI, de propriété d'image et d'une projection DLT: .. code-block:: python my_roi = ROI(xmin=-5.294, ymin=-5.118, xmax=2.395, ymax=3) ortho_params = OrthoImageParams(roi=my_roi, pixel_size=0.008, z=0.53) dlt_im_mapping = ortho.image_mapping(method=my_dlt, params=ortho_params) - Créer une série d'ortho-image via le mapping d'image: .. code-block:: python my_ortho_frame_stack = ortho.build_orthoimages(my_frame_stack, im_map=dlt_mapping) - Construire une grille de vitesse: .. code-block:: python my_grid = grid.from_ij_file("grid.dat", fs_ortho=my_ortho_frame_stack, swap=True) mask = import_mask("orthomask.png") my_grid = grid.crop(grid=my_grid, tool=mask) - Calcul des champs de vitesses pour chaque séquence d'image par PIV: .. code-block:: python my_piv_param = PIVParams(IA=32, Sim=10, Sjm=10, Sip=10, Sjp=10) vel_results = motion.compute_piv(fs_in=my_ortho_frame_stack, grid=my_grid, piv_param=my_piv_param) - Créer une liste de filtres pour les champs de vitesse: .. code-block:: python f_param1 = FilterVelocityThresholdParams(v_norm=(0, 100), v_x=(-100, 100), v_y=(-100, 100)) f_param2 = FilterCorrelationThresholdParams(c_min=0.4, c_max=0.98) my_filter_list = [FilterVelocityThreshold(f_param1)] my_filter_list.append(FilterCorrelationThreshold(f_param2)) - Appliquer les filtres au champs de velocimétrie: .. code-block:: python filtered_results = post_processing.apply_filters(res_in=vel_results, filter_list=my_filter_list) - Aggréger temporellement les résultats de vélocimétrie: .. code-block:: python agg_params = AggregationParams(method=AggregationMethod.MEDIAN, time_filter=[]) avg_results = post_processing.aggregate_results(res_in=vel_results, params=agg_params, filter_list=my_filter_list) - Importer et re-échantillonner un transect bathymétrique: .. code-block:: python my_xs = import_bathymetry(filepath="bathy.dat") my_xs = resample_bathymetry(xs_bathy=my_xs, dist_max=0.25) - Calcul de débit dans le transect: .. code-block:: python xs_param = FlowRateParameters(water_height=0.53, r_x=0.5, r_y=1, n_points=3, interpolator=VelocityInterpolator.ivp, fill_empty=False) xs_results = compute_flowrate(res_in=avg_results, xs_bathy=my_xs, params=xs_param) - Affichage des résultats: .. code-block:: python plot.plot_velocity_field(vel_res=avg_results, img=my_ortho_frame_stack.imgs[-1], roi=my_roi, xs_res=xs_results) plot_cross_section_flow(xs_res=xs_results)