You could use Smooth and repeat W -> Smooth -> F6 and adjust Smoothing factor and number of Repeats.
Or a small script - at the end of the script all selected faces will have almost identical area. The orientation and shape are preserved.
from math import sqrt
obj = bpy.context.edit_object
me = obj.data
bm = bmesh.from_edit_mesh(me)
face_data = 
area_accum = 0.0
for f in bm.faces:
area = f.calc_area()
if area != 0.0: # avoid divide by zero
center = f.calc_center_median_weighted()
face_data.append((f, area, center))
area_accum += area
area_average = area_accum / len(face_data)
print("average area is:", area_average)
for f, area, center in face_data:
rescale = sqrt(area_average / area)
for l in f.loops:
v = l.vert
v.co = ((v.co - center) * rescale) + center
# if you ran it a second time all areas are as close as they'll get.
(view this image in a new tab to see the difference in area directly displayed on the polygons)
The above script preserves Shape, but uses a rescale factor to homogenize the Area of all selected Faces. If you need to also make all edge lengths the same while preserving Area and Orientation that's possible too.